Validating and Binding Data
Tu aplicación de Observadores y Parámetros de Ruta puede usar FormView para editar datos de clientes existentes. Este paso utiliza Vinculación de datos, que conecta componentes de la interfaz de usuario directamente al modelo de datos para la sincronización automática de valores. Esto reduce el código repetitivo en tu aplicación y te permite agregar verificaciones de validación a la entidad de Spring Customer, haciendo que tus usuarios proporcionen información completa y precisa al llenar formularios. Este paso cubre los siguientes conceptos:
- Validación de Jakarta
- Uso de la clase
BindingContext
Completar este paso crea una versión de 5-validating-and-binding-data.
Ejecutando la aplicación
A medida que desarrollas tu aplicación, puedes usar 5-validating-and-binding-data como comparación. Para ver la aplicación en acción:
-
Navega hasta el directorio de nivel superior que contiene el archivo
pom.xml, que es5-validating-and-binding-datasi estás siguiendo la versión en GitHub. -
Usa el siguiente comando de Maven para ejecutar la aplicación de Spring Boot localmente:
mvn
Ejecutar la aplicación abre automáticamente un nuevo navegador en http://localhost:8080.
Definiendo reglas de validación
Desarrollar una aplicación con datos editables debe incluir la validación. Las verificaciones de validación ayudan a mantener datos significativos y precisos enviados por el usuario. Si se dejan sin control, podría provocar problemas, por lo que es importante detectar los tipos de errores que los usuarios pueden cometer al llenar un formulario en tiempo real.
Dado que lo que se considera válido puede diferir entre propiedades, necesitarás definir qué hace que cada propiedad sea válida e informar al usuario si hay algo que es inválido. Afortunadamente, puedes hacer esto fácilmente con Validación de Jakarta. La validación de Jakarta te permite agregar restricciones a las propiedades como anotaciones.
Este tutorial utiliza dos anotaciones de Jakarta, @NotEmpty y @Pattern. @NotEmpty verifica si hay valores nulos o cadenas vacías, mientras que @Pattern verifica si la propiedad coincide con una expresión regular que establezcas. Ambas anotaciones te permiten agregar un mensaje para mostrar cuando la propiedad se vuelva inválida.
Para requerir que tanto el nombre como el apellido sean obligatorios y contengan solo letras, mientras que el nombre de la empresa es opcional y permite letras, números y espacios, aplica las siguientes anotaciones a la entidad Customer:
Consulta la referencia de restricciones de Validación de Bean de Jakarta para obtener una lista completa de validaciones, o aprende más del artículo de Validación de Jakarta de webforJ.
Vinculando los campos
Para usar las verificaciones de validación en Customer para la interfaz de usuario en FormView, deberás crear un BindingContext para la vinculación de datos. Antes de la vinculación de datos, cada campo en FormView requería un listener de eventos para sincronizar manualmente con una entidad de Spring Customer. Crear un BindingContext en FormView vincula y sincroniza automáticamente el modelo de datos de Customer con los componentes de la interfaz de usuario.
Creando un BindingContext
Una instancia de BindingContext necesita el bean de Spring con el que se sincronizan las vinculaciones. En FormView, declara un BindingContext usando la entidad Customer:
public class FormView extends Composite<Div> implements WillEnterObserver {
private final CustomerService customerService;
private BindingContext<Customer> context;
Customer customer = new Customer();
Luego, para vincular automáticamente los componentes de la interfaz de usuario a las propiedades del bean según sus nombres, usa BindingContext.of() con los siguientes parámetros:
this: Antes, declarastecontextcomo elBindingContext. El primer parámetro establece qué objeto contiene los componentes vinculables.Customer.class: El segundo parámetro es la clase del bean a utilizar para la vinculación.true: El tercer parámetro habilita la validación de Jakarta, permitiendo que el contexto use las validaciones que configuraste paraCustomer. Hacer esto cambiará el estilo de los componentes inválidos y mostrará los mensajes establecidos.
Todo junto, lucirá como la siguiente línea de código:
context = BindingContext.of(this, Customer.class, true);
Haciendo el formulario receptivo
Con la vinculación de datos, tu aplicación ahora realiza automáticamente verificaciones de validación. Al agregar un listener de eventos a las verificaciones, puedes prevenir que los usuarios envíen un formulario inválido. Agrega lo siguiente para que el botón de envío esté activo solo cuando el formulario sea válido:
context = BindingContext.of(this, Customer.class, true);
context.onValidate(e -> submit.setEnabled(e.isValid()));