jsp struts2 ognl

jsp - struts2 file



Struts2 devMode Excepción al usar el atributo "clave" en la etiqueta de envío (1)

Estoy usando Struts2 con devMode activado para detectar tantas advertencias y errores como sea posible. Ahora me encontré con una notificación SEVERE que solo se notifica en devMode.

Estoy usando la etiqueta de submit e global.BOTON_LOGIN el atributo clave para obtener el texto del botón "Entrar" desde una propiedad llamada global.BOTON_LOGIN . El botón es parte de un formulario que llama una acción asignada a las actions.LoginAction la actions.LoginAction :

<s:submit key="global.BOTON_LOGIN" type="button" />

El texto del botón se muestra correctamente y cuando presiono este botón todo funciona bien, a excepción de esta notificación SEVERE que aparece en el registro:

30-Mar-2015 00:46:37.855 SEVERE [http-apr-8080-exec-146] com.opensymphony.xwork2.util.logging.jdk.JdkLogger.error Developer Notification (set struts.devMode to false to disable this message): Unexpected Exception caught setting ''global.BOTON_LOGIN'' on ''class actions.LoginAction: Error setting expression ''global.BOTON_LOGIN'' with value [''Entrar'', ]

Me di cuenta de que el código HTML generado para el botón es:

<button type="submit" id="login_global_BOTON_LOGIN" name="global.BOTON_LOGIN" value="Entrar">Entrar</button>

Mi solución para deshacerme de esa entrada SEVERE es usar el atributo value y el método getText lugar del atributo key :

<s:submit value="%{getText(''global.BOTON_LOGIN'')}" type="button" />

que a su vez genera ese código HTML:

<button type="submit" id="login_0" value="Entrar">Entrar</button>

y la notificación SEVERE se ha ido.

¿Hay algo que hago mal en el primer caso?


Has usado el valor de un atributo key que no vinculó un botón de enviar a la acción. Las etiquetas UI de Struts generalmente vinculan el valor del atributo de name a la acción. De acuerdo con la página de documentación de Struts, un parámetro key es

Establecer la clave (nombre, valor, etiqueta) para este componente en particular

El primero es un atributo de name se usa para analizar la expresión OGNL para establecer un valor para la pila de valores. En la medida en que no tenga ese valor, se lanzará la excepción OGNL, pero el interceptor de parámetros se usó para captar e ignorar este tipo de excepciones. Y solo si tiene devMode activado, puede ver esta excepción en los registros.

Por lo general, si está utilizando un atributo de key en la etiqueta de Struts, debe usar el mismo nombre de propiedad que una clave en el archivo de propiedades, de modo que vincula correctamente la propiedad de acción.