jueves, 14 de abril de 2011

CRUD Ejemplo - Vaadin - Vista

En esta parte crearemos la interfaz web usando el framework Vaadin, aca crearemos un formulario básico con los campos necesarios para crear un registro de un usuario.

Ahora para crear la parte de la vista web del aplicativo modifico la clase MyApplication.java para que quede de la siguiente manera:
 /*
* MyApplication.java
*
* Created on 12 de abril de 2011, 04:09 PM
*/
package com.ejemplo.vaadin;
import com.ejemplo.vaadin.admusuarios.FormularioUsuario;
import com.ejemplo.vaadin.servicios.ServicioUsuarios;
import com.vaadin.Application;
import com.vaadin.ui.*;
import com.vaadin.data.*;
import org.springframework.beans.factory.annotation.Autowired;
/**
*
* @author josorio
* @version
*/
public class MyApplication extends Application {
@Autowired
ServicioUsuarios servicioUsuarios;
@Override
public void init() {
Window mainWindow = new Window("MyApplication");
Label label = new Label("Ejemplo de Vaadin, Spring e Hibernate");
mainWindow.addComponent(label);
FormularioUsuario formUsuario = new FormularioUsuario();
mainWindow.addComponent(formUsuario);
setMainWindow(mainWindow);
}
/**
* Método qu retorno el objeto injectado para que otras clases de la aplicación puedan usarlo
* @return El objeto ServicioUsuario injectado
*/
public ServicioUsuarios getServicioUsuarios() {
return servicioUsuarios;
}
}

Finalmente creo el formulario en Vaadin con los campos necesarios para registrar el usuario:
 /*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package com.ejemplo.vaadin.admusuarios;
import com.ejemplo.vaadin.MyApplication;
import com.ejemplo.vaadin.entidades.Usuario;
import com.vaadin.data.Property;
import com.vaadin.data.validator.EmailValidator;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.CheckBox;
import com.vaadin.ui.ComboBox;
import com.vaadin.ui.Form;
import com.vaadin.ui.TextField;
import com.vaadin.ui.Window.Notification;
@SuppressWarnings("serial")
public class FormularioUsuario extends Form {
/** Caja de texto para ingresar los nombres del usuario */
TextField txtNombres;
/** Caja de texto para ingresar los apellidos del usuario */
TextField txtApellidos;
/** Caja de texto para ingresar el correo del usuario */
TextField txtCorreo;
/** Caja de texto para ingresar la clave para el usuario*/
TextField txtClave;
/** Botón para realizar la acción de guardado */
Button btnGuardar;
public FormularioUsuario() {
txtNombres = new TextField("Nombres");
txtNombres.setDescription("Ingrese los nombres del usuario");
txtNombres.setRequired(true);
txtNombres.setRequiredError("Debe ingresar los nombres del usuario");
txtApellidos = new TextField("Apellidos");
txtApellidos.setDescription("Ingrese los apellidos del usuario");
txtApellidos.setRequired(true);
txtApellidos.setRequiredError("Debe ingresar los apellidos del usuario");
txtCorreo = new TextField("Correo");
txtCorreo.setDescription("Ingrese el correo electronico del usuario");
txtCorreo.setRequired(true);
txtCorreo.setRequiredError("El correo es un campo obligatorio, por favor ingrese un valor");
txtCorreo.addValidator(new EmailValidator("Debe ingresar una dirección de correo válida"));
txtClave = new TextField("Clave");
txtClave.setDescription("Ingrese la clave para el usuario");
txtClave.setRequired(true);
txtClave.setRequiredError("Debe ingresar una clave para el usuario");
addField("txtNombres", txtNombres);
addField("txtApellidos", txtApellidos);
addField("txtCorreo", txtCorreo);
addField("txtClave", txtClave);
btnGuardar = new Button("Guardar Usuario");
btnGuardar.addListener(new Button.ClickListener() {
public void buttonClick(ClickEvent event) {
if (isValid()) {
 Usuario usuario = formularioAEntidad();
 //ejecuto el guardado
 Integer respuesta = ((MyApplication) getApplication()).getServicioUsuarios().guardarUsuario(usuario);
 switch (respuesta.intValue()) {
   // Si la solicitud se procesó bien
   case 0:
     getWindow().showNotification("Se ha guardado el usuario correctamente");
     //Reseteamos el formulario para que quede limpio
     reset();
     break;
   // Si el usuario no existe
   case 1:
     getWindow().showNotification("Al parecer usted no "
         + "cuenta con privilegios para realizar ésta acción", Notification.TYPE_WARNING_MESSAGE);
     break;
   // Si se presentó un error
   case 2:
     getWindow().showNotification("No se ha encontrado una sesión activa "
         + "al procesar la solicitud", Notification.TYPE_ERROR_MESSAGE);
     break;
   //si excepcion de duplicate data
   case 4:
     getWindow().showNotification("Ya existe un usuario definido para este correo!", Notification.TYPE_ERROR_MESSAGE);
     break;
   // Si el resultado no es el esperado
   default:
     getWindow().showNotification("El servidor respondió "
         + "de forma inesperada, por favor "
         + "reporte este mensaje de error", Notification.TYPE_ERROR_MESSAGE);
 }
} else {
 getWindow().showNotification("Por favor ingrese todos los datos marcados con * "
     + "en el formulario", Notification.TYPE_ERROR_MESSAGE);
}
}
});
addField("btnGuardar", btnGuardar);
}
/**
* Método para cargar el formulario con los datos del objeto parámetro
* @param usuario - Entidad usuario
*/
public void entidadAFormuario(Usuario usuario) {
txtNombres.setValue(usuario.getNombres());
txtApellidos.setValue(usuario.getApellidos());
txtCorreo.setValue(usuario.getCorreo());
}
/**
* Método para crear una entidad con los datos ingresados al formulario
* @return El usuario creado
*/
public Usuario formularioAEntidad() {
Usuario retorno;
retorno = new Usuario();
retorno.setClave((txtClave.getValue().toString()));
retorno.setNombres(txtNombres.getValue().toString());
retorno.setApellidos(txtApellidos.getValue().toString());
retorno.setCorreo(txtCorreo.getValue().toString());
return retorno;
}
/**
* Resetear contenido formulario.
*/
public void reset() {
txtNombres.setValue("");
txtApellidos.setValue("");
txtCorreo.setValue("");
txtClave.setValue("");
}
}

Ya tenemos todo el código necesario para ejecutar la aplicación, al hacerlo veremos la siguiente pantalla:



La estructura final del proyecto es la siguiente:

3 comentarios:

  1. hay una forma más elegante de hacer los enlaces de la forma al objeto de usuario, en lugar de establecer un campo a otro?

    Quiero decir, no hay manera de pasar todos los valores de forma que los atributos del objeto de usuario de forma automática?

    Lo siento por el mal español, soy brasileño y estoy usando la traducción.


    abrazos

    ResponderEliminar
  2. No se si te entendí bien pero en el ejemplo del demo de vaadin http://demo.vaadin.com/sampler#FormBasic, crean el formulario a partir de un Bean

    ResponderEliminar
  3. Hola una consulta,
    ya tengo realizado los módulos en vaadin, pero adicional tengo un proyecto hecho en jsp, entonces cómo hago para poder mostrarlo de manera embebida dentro de algún layout de vaadin. He revisado que puedes incluir a una web:
    URL url = new URL("http://elcomercio.pe/");
    Embedded browser = new Embedded("", new ExternalResource(url));
    browser.setType(Embedded.TYPE_BROWSER);
    miPanelVaadin.addComponent(browser);

    Traté de usar esto, ingresando en el url la ruta de mi jsp, pero no me funciona... alguien que haya intentado haacer algo similar??

    ResponderEliminar