validar tutorial restricción pattern online español error dian archivo java validation jsp struts2 interceptorstack

java - restricción - struts 2 tutorial español



La validación de Struts2 no funciona correctamente, no se muestran los mensajes de error de validación (2)

En primer lugar, uso un tema simple, pero incluso sin él, se produce el mismo comportamiento (excepto el formateo de la página). Cuando envío el formulario, el campo de nombre se vacía y se redirecciona a register.jsp sin mostrar el error de validación. Después de verificar los registros o con el depurador, parece que la validación está funcionando correctamente y los mensajes de registro del servidor se escriben como se esperaba. Voy a publicar un código genérico.

struts.properties

struts.ui.theme=simple

MyAction

private User user = new User() // getter and setter @Inject transient UserDAO userDAO; @Override public User getModel() { return user; } public void validate(){ LOG.debug("NAME VALIDATION " + user.getName()); if("".equals(user.getName())){ addFieldError("user.name", "Name can''t be empty"); LOG.debug("Validation Error on name"); } }

Comprobado con el depurador, el método de validación está funcionando y los registros están escritos.

struts.xml

<package name="users" extends="struts-default"> <action name="registerUser" method="prepareRegister" class="com.test.MyAction"> <result name="success">/register.jsp</result> </action> <action name="saveOrUpdateUser" method="saveOrUpdate" class="com.test.MyAction"> <result name="input" type="redirect">registerUser</result> <result name="success" type="redirect">listUser</result> </action> </package>

register.jsp

<td> <s:textfield id = "userName" label = "User Name" name = "user.name" /> </td> <s:fielderror fieldName = "user.name" />

No dude en pedirme aclaraciones. Soy bastante nuevo en struts 2, probé la forma de validación de la documentación de struts 2 y revisé otros tutoriales también. No sé si me falta algo o tengo alguna configuración incorrecta que no estoy notando, ya que la lógica está funcionando y la parte de la vista (jsp) no lo está. Gracias por adelantado.


Después de haber leído cómo funciona el resultado INPUT y haber abandonado el patrón de diseño ModelDriven que no agrega nada a su experiencia de programación, excepto los problemas, que podrían ocultarse fácilmente en el medio de la pila del interceptor , tenga en cuenta que:

  • redirect es el resultado que se debe usar al redirigir a URL externas o URL que no sean de acción, mientras que se debe usar redirectAction cuando se redirecciona a una Acción;
  • al redirigir, se crea una nueva solicitud y, por lo tanto, se pierden los parámetros anteriores (incluidos los errores de acción y los mensajes y los errores de campo).

Para evitar eso, si desea seguir usando el patrón PRG (y, por lo tanto, la redirección), puede usar el Interceptor MessageStore que almacenará y recuperará los mensajes por usted a través de las redirecciones; simplemente defina una pila de interceptor que lo contenga, y resolverá su problema.

O hazlo una vez como en el ejemplo de la documentación .


Esto es lo que funcionó al final y después de los útiles comentarios de Andrea:

<action name="saveOrUpdatePlayer" method="saveOrUpdate" class="com.test.MyAction"> <interceptor-ref name="store"> <param name="operationMode">STORE</param> </interceptor-ref> <interceptor-ref name="defaultStack" /> <result name="input">/register.jsp</result> <result name="success" type="redirectAction">listUser</result> </action>

Con esto, los mensajes de validación se muestran correctamente. Cuando utilicé el tipo redirectAction para input , los mensajes desaparecían. Parece que defaultStack hizo el trabajo.