Loading...
Important Notice - Forums is archived

To simplify things and help our users to be more productive, we have archived the current forum and focus our efforts on helping developers on Stack Overflow. You can post new questions on Stack Overflow or join our Discord channel.

Product icon
TUTORIAL

Vaadin lets you build secure, UX-first PWAs entirely in Java.
Free ebook & tutorial.

FieldGroup Bind Combobox Bean

Matias Gutierrez
6 years ago Sep 14, 2015 5:48pm
Matias Gutierrez
6 years ago Sep 15, 2015 2:07pm
Rodrigo Fernández
6 years ago Sep 16, 2015 7:35am
omar alles
6 years ago Sep 16, 2015 7:57am

Buenas Matías,

Entiendo que al FieldGroup le estás pasandocomo ITEM data source el item que obtienes del table verdad?

Este Item tiena una property de id "empresa.razonSocial" . Y asociarlo via un bind al ComboBox lo que queremos es que se haga un setValue un el combo con el valor de la propertyid.. 

No sé si lo has hecho así pero probaría a definir un  BeanContainer<T, Empresa> donde T sea el TIPO de la propiedad razonSocial de Empresa. 

BeanContainer<T, Empresa> empresasContainer = new BeanContainer<T, Empresa>(
            Empresa.class);
empresasContainer.setBeanPropertyId("razonSocial");
// Obtenemos todas las empresas y las cargamos al container
Collection<Empresa> todasLasEmpresas = ...;
empresasContainer.addAll(todasLasEmpresas);
getCmbEmpresa().setContainerDataSource(empresasContainer);

A ver si te sirve

Saludos, 

Matias Gutierrez
6 years ago Sep 16, 2015 12:47pm
Rodrigo Fernández
6 years ago Sep 16, 2015 1:22pm

formularioPacienteModificar.getFieldGroup().setItemDataSource(item); <-- para los textefields. Se cargan bieny para el combo
formularioPacienteModificar.getBeanFieldGroup().setItemDataSource(item);  <- para el combo con las empresas
 
// tambien probe con esto

formularioPacienteModificar.getBeanFieldGroup().setItemDataSource(item.getBean().getEmpresa());
donde item es, como dice Omar, el datasource.
 

De esto deduzco que tienes dos elementos FieldGroup? Uno para la propiedad "empresa" y otra para el resto de fields?
Si es así, te recomiendo utilizar sólo uno. Aquí tienes la opción de trabajar directamente con el bean de tipo Paciente, o con un Item que contenga las properties de Paciente. A mi, personalmente, si puedo trabajar directamente con beans, prefiero esa opción.

Supongamos que utilizas BeanFieldGroup y beans Paciente directamente. Haces los bindings para cada field del tipo Paciente, entre ellos:

beanFieldGroup.bind(getCmbEmpresa(), "empresa");

Para que el ComboBox te muestre la propiedad "razonSocial" como caption de los items que contiene, debes hacer lo siguiente:

getCmbEmpresa().setItemCaptionMode(ItemCaptionMode.PROPERTY);
getCmbEmpresa().setItemCaptionPropertyId("razonSocial");

Una vez hecho esto cargas en el formulario el bean de tipo Paciente:

formularioPacienteModificar.getBeanFieldGroup().setItemDataSource(item.getBean());

Si no se te han actualizado alguno de los campos, 

formularioPacienteModificar.getBeanFieldGroup().discard();

En definitiva, la propiedad a la que haces el binding en el ComboBox no es "empresa.razonSocial", sino "empresa" directamente.
Todo esto asumiendo que el Item que obtienes de la tabla es BeanItem. Si el Item no tiene un bean detrás, requiere una aproximación un poco diferente respecto al ComboBox.
 

Matias Gutierrez
6 years ago Sep 16, 2015 2:08pm
Matias Gutierrez
6 years ago Sep 16, 2015 3:33pm
Rodrigo Fernández
6 years ago Sep 16, 2015 3:43pm