validation struts2 struts2-interceptors

validation - validación de struts2 y método de preparación relacionado



struts2-interceptors (1)

No debe instanciar usted mismo un objeto que proviene de JSP.

Para obtenerlo en el método de prepare() , ejecutado por el Prepare Interceptor prepare() antes del Param Interceptor , debe usar una pila especial : paramsPrepareParamsStack

<!-- An example of the paramsPrepareParams trick. This stack is exactly the same as the defaultStack, except that it includes one extra interceptor before the prepare interceptor: the params interceptor. This is useful for when you wish to apply parameters directly to an object that you wish to load externally (such as a DAO or database or service layer), but can''t load that object until at least the ID parameter has been loaded. By loading the parameters twice, you can retrieve the object in the prepare() method, allowing the second params interceptor to apply the values on the object. --> <interceptor-stack name="paramsPrepareParamsStack"> <interceptor-ref name="exception"/> <interceptor-ref name="alias"/> <interceptor-ref name="i18n"/> <interceptor-ref name="checkbox"/> <interceptor-ref name="multiselect"/> <interceptor-ref name="params"> <param name="excludeParams">^class/..*,^dojo/..*,^struts/..*,^session/..*,^request/..*,^application/..*,^servlet(Request|Response)/..*,^parameters/..*,^action:.*,^method:.*</param> </interceptor-ref> <interceptor-ref name="servletConfig"/> <interceptor-ref name="prepare"/> <interceptor-ref name="chain"/> <interceptor-ref name="modelDriven"/> <interceptor-ref name="fileUpload"/> <interceptor-ref name="staticParams"/> <interceptor-ref name="actionMappingParams"/> <interceptor-ref name="params"> <param name="excludeParams">^class/..*,^dojo/..*,^struts/..*,^session/..*,^request/..*,^application/..*,^servlet(Request|Response)/..*,^parameters/..*,^action:.*,^method:.*</param> </interceptor-ref> <interceptor-ref name="conversionError"/> <interceptor-ref name="validation"> <param name="excludeMethods">input,back,cancel,browse</param> </interceptor-ref> <interceptor-ref name="workflow"> <param name="excludeMethods">input,back,cancel,browse</param> </interceptor-ref> </interceptor-stack>

En tener una acción de custprofileview que muestre una página JSP con todos los detalles del cliente y en mi JSP todos los campos son como mi

<s:textfield name="custprofileVO.email" value="%{custprofileVO.email}" /> <s:textfield name="custprofileVO.phone" value="%{custprofileVO.phone}" />

y hazlo así, y hay un botón de enviar que llama a Action updatecustprofile .

En updatecustprofile Action, en lugar de asignar propiedades directamente, tengo una variable de miembro private CustprofileVO custprofileVO; con setter y getter.

En CustprofileVO Clase I tengo campos como el email , el phone y todos los demás campos con sus métodos setters y getters.

El problema es : en updatecustprofile Acción Estoy implementando la Interfaz Prepareable , y en la implementación del método prepare() tengo custprofileVO.setDefaultID("Select"); y estableciendo 4 campos más, pero cuando ejecuto el programa haciendo clic en el botón de enviar obtengo NPE en la primera línea que es custprofileVO.setDefaultID("Select");

Parece que el marco no está instanciando CustprofileVO custprofileVO . Si instancia manualmente custprofileVO justo encima de la configuración del campo (al hacer custprofileVO = new CustprofileVO() entonces funciona. El problema es que, idealmente, struts2 framework debería darme una instancia que no está haciendo, quiero entender el motivo.

Además, si configuro manualmente custprofileVO en el método de preparación, funciona, pero también he aplicado la validación usando XML, donde mi nombre de campo es custprofileVO.email , su validación y luego custprofileVO.phone su validación.

Cuando intento validar al hacer clic en botón de enviar, la validación se ejecuta, pero en la pantalla veo mensajes para todos los campos, ya que los datos en todos los cuadros de texto se borran.

¿Por qué se eliminan los datos?