我正在使用带有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通知消失了。
在第一种情况下,我做错了吗?
答案 0 :(得分:1)
您使用了key
属性的值,该值未将提交按钮绑定到操作。 Struts UI标记通常将name
属性的值绑定到操作。根据Struts文档页面,key
参数是
设置此特定组件的键(名称,值,标签)
第一个是name
属性,用于解析OGNL表达式以将值设置为值堆栈。如果您没有这样的值,则抛出OGNL异常,但参数拦截器用于捕获并忽略此类异常。只有当您打开devMode
时,您才能在日志中看到此异常。
通常,如果在Struts标记中使用key
属性,则应使用与属性文件中的键相同的属性名称,以便正确绑定action属性。