2012-09-13 13 views
6

¿Cuál es la mejor manera de recortar esta cadena/dónde es el mejor lugar para poner el código de recorte?Trimming Struts2 cadena de campo de texto de entrada

Decir que tengo el siguiente campo de texto en mi jsp:

<s:textfield label="First Name" name="person.firstname"/> 

La clase de acción:

public class BaseAction extends ActionSupport implements ServletRequestAware, SessionAware { 
    private Person person; 
    // Getters, setters and action logic 
} 

El grano:

public class Person implements Serializable { 
    private String lastname; 
    private String firstname; 
    // Getters and setters 
} 

que puede cambiar la configuración predeterminada en el frijol pero esto parece un truco:

public void setFirstname(String firstname) { 
    this.firstname = firstname.trim(); 
} 

EDITAR: Yo también veo esta pregunta: struts2 trim all string obtained from forms donde también ha sugerido por algunos que el método "correcto" es utilizar un interceptor.

¿Por qué un interceptor es la forma "correcta"? ¿Qué hay de malo en cambiar los incubadores del frijol?

Respuesta

3

La respuesta corta es No está predeterminado, no hay un mecanismo de compilación para hacer esto y usted necesita hacerlo en su clase de acción o algún tipo de java-script lo hará por usted.

Otra forma posible es crear un interceptor para hacer esto con la opción de excluir o algo similar en una caminata similar.

Creo que Interceptor es una buena forma de hacerlo, es mejor tener dicho interceptor con S2.

+0

Gracias Umesh. ¿Te importa expandir un poco tu respuesta y explicar por qué el interceptor es el camino a seguir? – nmc

+1

@nmc Implementar el uso de interceptor es bueno porque podemos hacerlo de una manera genérica y aplicarlo a cualquier acción. –

6

Se puede hacer con Struts2 converters.

public class TrimmingStringConverter extends StrutsTypeConverter { 

    public Object convertFromString(Map ctx, String[] values, Class arg2) { 
     if (values != null && values.length > 0) { 
      return values[0].trim(); 
     } 

     return null; 
    } 

    public String convertToString(Map ctx, Object o) { 
     if (o != null) { 
      return o.toString(); 
     } 
     else { 
      return null; 
     } 
    } 

    public Object convertValue(Map context, Object o, Class toClass) 
    { 
     if (o == null) { 
      return null; 
     } else if (toClass == java.lang.String.class) { 
      if (o instanceof String[]) { 
       String[] os = (String[]) o; 

       if (os.length > 0) { 
        return os[0].trim(); 
       } 
      } 

      return o.toString().trim(); 
     } 

     return super.convertValue(context, o, toClass); 
    } 
} 

Se debe estar registrado en xwork-conversion.properties: java.lang.String = es.jogaco.webapp.TrimmingStringConverter

Esto se aplica a todas las entradas usuario.

Funcionará si tiene los interceptores struts2 predeterminados. Citado de doc struts2:

Por defecto, el interceptor de conversión se incluye en struts-default.xml en la pila por defecto

además de que tienen que trabajar en mi aplicación struts2.

Cuestiones relacionadas