我使用的Struts2已devMode打开,以捕获尽可能多的警告和错误。现在我遇到了一些严重通知,仅在devMode中进行了通知。
devMode
我正在使用submit标记,并且包含 key 属性来"Entrar"从名为的属性中获取按钮文本global.BOTON_LOGIN。该按钮是表单的一部分,该表单调用映射到该类的动作actions.LoginAction:
submit
"Entrar"
global.BOTON_LOGIN
actions.LoginAction
<s:submit key="global.BOTON_LOGIN" type="button" />
按钮的文本正确显示,当我按此按钮时,一切正常,除了在日志中显示的“严重”通知之外:
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属性:
value
getText
key
<s:submit value="%{getText('global.BOTON_LOGIN')}" type="button" />
依次生成HTML代码:
<button type="submit" id="login_0" value="Entrar">Entrar</button>
而SEVERE通知不见了。
在第一种情况下,我有做错什么吗?
您使用的key属性值未将提交按钮绑定到操作。Struts UI标记通常将name属性的值绑定到操作。根据Struts docs页面,key 参数 为
name
设置此特定组件的键(名称,值,标签)
第一个name是用于解析OGNL表达式以将值设置为值堆栈的属性。只要您没有这样的值,就抛出OGNL异常,但是参数拦截器用于捕获和忽略这种异常。而且只有在devMode打开电源后,您才能在日志中看到此异常。
通常,如果您key在Struts标记中使用属性,则应使用与属性文件中的键相同的属性名称,以便它正确绑定action属性。