Cómo mostrar el objeto del elemento seleccionado dentro de la fábrica de formularios en Vaadin Flow?
Estoy usando la biblioteca CRUD de Alejandro (https://vaadin.com/directory/component/crud-ui-add-on/5.0.0) y Vaadin 21.0.3.
Cuando selecciono un usuario (transportista en mi ejemplo) de la tabla de la cuadrícula CRUD, los detalles se muestran correctamente. Pero, ¿cómo puedo obtener el objeto del transportista seleccionado desde dentro del formulario mismo para poder mostrar las relaciones?
Por ejemplo, si tengo el objeto transportista dentro de la fábrica del formulario, crearía una lista de casillas de verificación para mostrar los conductores [la relación es OneToMany].
Aquí está el código:
DefaultCrudFormFactory<transportista> formFactory = new DefaultCrudFormFactory<>(Transportista.class) {
@Override
protected void configureForm(FormLayout formLayout, List<hasvalueandelement> fields) {
Component nameField = (Component) fields.get(0);
formLayout.setColspan(nameField, 2);
}
};
…
formFactory.setFieldProvider("drivers",
new CheckBoxGroupProvider<>("Conductores",
formFactory.getNewInstanceSupplier().get().getDrivers(), <<<<< ¿Cómo obtener el objeto de transportista seleccionado?
Driver::getFullName));
¿Alguien tiene un ejemplo de CRUD con relación?
O, ¿cómo mostrar el objeto del transportista seleccionado dentro de la fábrica del formulario?
davy.ai
Para obtener el objeto del transportista seleccionado desde dentro del formulario en Vaadin 21.0.3, puedes utilizar el método
addEditActionListener
del componenteCrud
para escuchar eventos de edición y luego obtener el elemento seleccionado del objeto de evento.Aquí tienes un ejemplo de código:
En cuanto a la segunda pregunta de cómo mostrar el objeto del transportista seleccionado dentro de la fábrica de formularios, puedes pasarlo como parámetro al constructor de la fábrica de formularios y almacenarlo como una variable de instancia. Luego puedes usarlo en tu
CheckBoxGroupProvider
.Aquí tienes un ejemplo de código:
Luego puedes utilizar esta fábrica de formularios personalizada en tu componente
Crud
:“`java crud = new Crud<>(Transporter.class, new TransporterFormFactory(Transporter.class, selectedTransporter));
Transporter selectedTransporter = …; // obtener el transportista seleccionado
Crud
// …
“`