java - tabla - obtener el valor de un selectonemenu
agregar texto a un cuadro combinado con una fuente de datos (3)
Tengo un combobox vaadin que está lleno de un containerdatasource
setContainerDataSource(container);
Ahora quiero insertar un texto estático en algún lugar de la lista de resultados.
Por ejemplo:
Un Combobox que está lleno con un contenedor de y la primera entrada que aparece en la lista de resultados es algún tipo de encabezado:
Personas:
Thomas S.
Lucas B.
Alex X.
¿Puedo lograr eso manipulando el contenedor o el combobox?
Intenté establecer el origen del contenedor y agregar una cadena / etiqueta a través de addItem () al ComboBox, pero parece que no funciona. Soy un poco nuevo en esto, así que no sé cómo continuar.
Debería hacer el cambio en el contenedor (por ejemplo: agregar elementos ...) y volver a llamar a setContainerDataSource (contenedor) en el cuadro combinado (para que se propague al cliente).
Si su código es similar a esto:
BeanItemContainer<Person> container = new BeanItemContainer<Person>(Person.class);
container.addAll(myPersonList);
ComboBox combobox = new ComboBox();
combobox.setContainerDataSource(container);
combobox.setItemCaptionMode(Select.ITEM_CAPTION_MODE_PROPERTY);
combobox.setItemCaptionPropertyId("name"); // the person''s name field will be shown on the UI
// imho if you want to add a static text (String) into a container
// which populated with Person objects then you have to make a fake Person object
Person staticText = new Person();
staticText.setName("My static text");
combobox.addItem(staticText);
// if you want to specify the index of the item, add them one by one in for cycle
// and insert the static text item in the appropritate place
Si está utilizando el ComboBox como inmediato y no quiere que la "Persona:" se maneje como una persona real, podría usar setNullSelectionItemId
para definir a la persona falsa como un verdadero objeto ficticio. Sin embargo, esta solución tiene la limitación de que solo puede agregar un objeto ficticio.
Aquí está mi ejemplo que agrega "Persona:" en la parte superior de la lista y lo maneja como un valor nulo. Tenga en cuenta que estoy usando Vaadin 7.
import com.vaadin.data.Property;
import com.vaadin.data.Property.ValueChangeEvent;
import com.vaadin.data.util.BeanItemContainer;
import com.vaadin.server.VaadinRequest;
import com.vaadin.ui.AbstractSelect;
import com.vaadin.ui.ComboBox;
import com.vaadin.ui.Notification;
import com.vaadin.ui.UI;
import com.vaadin.ui.VerticalLayout;
/**
* The Application''s "main" class
*/
@SuppressWarnings("serial")
public class MyVaadinUI extends UI {
@Override
protected void init(VaadinRequest request) {
final VerticalLayout layout = new VerticalLayout();
layout.setMargin(true);
setContent(layout);
BeanItemContainer<Person> container = new BeanItemContainer<Person>(Person.class);
Person nullPerson = new Person(0, "Person:");
container.addBean(nullPerson);
container.addBean(new Person(1, "Django"));
container.addBean(new Person(2, "Schultz"));
ComboBox combobox = new ComboBox();
combobox.setImmediate(true);
combobox.setNullSelectionItemId(nullPerson); // Define the null person as a dummy.
combobox.setContainerDataSource(container);
combobox.setItemCaptionMode(AbstractSelect.ItemCaptionMode.PROPERTY);
combobox.setItemCaptionPropertyId("name"); // the person''s name field will be shown on the UI
combobox.addValueChangeListener(new Property.ValueChangeListener() {
@Override
public void valueChange(ValueChangeEvent event) {
// Will display ''null selected'' when nullPerson is selected.
Notification.show(event.getProperty().getValue() + " selected");
}
});
layout.addComponent(combobox);
}
}