Struts2 devMode在提交标记中使用“key”属性时出现异常

时间:2015-03-29 23:25:36

标签: jsp struts2 ognl

我正在使用带有devMode的Struts2来捕获尽可能多的警告和错误。现在我遇到了一些仅在devMode中通知的SEVERE通知。

我正在使用submit标记,并且我包含属性,以从名为"Entrar"的属性中获取按钮文本global.BOTON_LOGIN。该按钮是表单的一部分,该表单调用映射到类actions.LoginAction的操作:

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

按钮的文本显示正确,当我按下此按钮时,一切正常,除了日志中显示的SEVERE通知:

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', ]

我注意到为该按钮生成的HTML代码是:

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

我摆脱SEVERE条目的解决方法是使用value属性和getText方法而不是key属性:

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

反过来生成HTML代码:

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

并且SEVERE通知消失了。

在第一种情况下,我做错了吗?

1 个答案:

答案 0 :(得分:1)

您使用了key属性的值,该值未将提交按钮绑定到操作。 Struts UI标记通常将name属性的值绑定到操作。根据Struts文档页面,key 参数

  

设置此特定组件的键(名称,值,标签)

第一个是name属性,用于解析OGNL表达式以将值设置为值堆栈。如果您没有这样的值,则抛出OGNL异常,但参数拦截器用于捕获并忽略此类异常。只有当您打开devMode时,您才能在日志中看到此异常。

通常,如果在Struts标记中使用key属性,则应使用与属性文件中的键相同的属性名称,以便正确绑定action属性。