Ver Mensaje Individual
  #67 (permalink)  
Antiguo 14/05/2008, 15:30
Avatar de Lino-kun
Lino-kun
 
Fecha de Ingreso: mayo-2008
Ubicación: Cuernavaca Morelos Mexico
Mensajes: 126
Antigüedad: 16 años, 5 meses
Puntos: 2
Re: FAQ's de Java

Tema: NET y MVC
Pregunta: clase ActionForm?
Respuesta:

Continuando con los mini tutos, este ejercicio consiste en realizar un ActionForm de prueba que implemente la dinámica de las clases anteriores.


DireccionForm.java

Esta clase extiende de ActionForm y la mayoría de sus metodos son get y set de sus atributos, para el caso de los tipos boléanos en lugar de get se usa el termino is, también contiene un método validate y un método reset los cuales se pueden sobre escribir para realizar validaciones a gusto del usuario.

Código PHP:
import org.apache.struts.action.ActionForm;
import javax.servlet.http.*;
import org.apache.struts.action.*;
import com.lino.prueba.dto.*;

public class 
DireccionForm extends ActionForm{
    private 
String postalCode=null;
    private 
DireccionDTO direccion=new DireccionDTO();
    
    public 
DireccionForm(){}
    
    public 
void setPostalCode(String postalCode){
      
this.postalCode=postalCode;    
    }
    
    public 
String getPostalCode(){
       return 
this.postalCode;     
    }
    
    public 
DireccionDTO getDireccion(){
       return 
this.direccion;    
    }
    
    public 
void setDireccion(DireccionDTO direccion){
        
this.direccion=direccion;
    }
    
    public 
ActionErrors validate(ActionMapping mappingHttpServletRequest request) {
        
ActionErrors errors = new ActionErrors();
        if ((
postalCode == null) || (postalCode.length() < 1))
            
errors.add("postalcode1", new ActionError("error.postalcode.required"));
        return 
errors;
    }            
    
    public 
void reset(ActionMapping actionMapping,    HttpServletRequest Request) {
           
postalCode "";
    }
    

Este form tiene dos variables, un tipo String llamado postalCode y un tipo compuesto llamado direccion, algo que es importante definir en las reglas de java es que los nombres de variables siempre deben comenzar con minúscula en el caso de que estas variables contengan un método get y set, esto dado que el compilador no hallará estos métodos si las variables comienzan con mayúscula.

Una clase form debe tener para cada atributo (variable) que se presentara en un <html:form> un método get y set, la clase form puede tener atributos que no se presenten en un <html:form> e incluso métodos que no sean get y set, tal como una clase tradicional. Un error frecuente al momento de cargar una clase form en un <html:form> es que no encuentre los metodos get y set de los atributos. Esto por que los métodos get y set no corresponden a las variables (atributos que se declaran). Por ejemplo si tenemos lo siguiente
Código PHP:
String nombre=null;

public 
void setNombres(String nombre){
   
this.nombre=nombre;

Este fragmento de código es erróneo por que a pesar de que este método set use la variable “nombre” el método se llama “setNombres” cuando debería llamarse “setNombre” otro caso común de error como ya se menciono es este.
Código PHP:
String Nombre=null;

public 
void setNombre(String nombre){
   
this.nombre=nombre;

En este caso la variable y el método parecen llamarse igual pero no es así, por regla si quieres tener un método set y get para un atributo debe comenzar con minúscula por eso cuando el compilador encuentra que estamos usando el atributo Nombre en el <html:form> marca que no existe método set o get, en todo caso lo mas correcto seria llamar el método así.
Código PHP:
String nombre=null;

public 
void setNombre(String nombre){
   
this.nombre=nombre;

Una vez que se ha entendido esto es mucho más fácil evitar errores de este tipo. La clase Form puede o no tener los métodos validate y reset, estos métodos son sobre escríbibles y en ellos se puede establecer condiciones para que los datos lleguen de forma optima al ActionServlet, si el lector observa en este ejemplo de clase Form el método validate solamente comprueba de que el código postal no sea nulo o menor de 1 y el método reset establece a nulo la variable postalCode.

Los ActionErrors y ActionMessages son instrucciones que a final de cuentas se toman como mensajes que pueden ser visualizados en las paginas JSP esto mas adelante se verá un poco mas a profundidad, estos mensajes puede ser manipulados por el usuario o descritos en un archivo ApplicationResources.properties, este archivo no solo se ocupa para esto, pero eso también se verá mas adelante.

Esta clase se debe crear dentro del paquete com.lino.prueba.form