小编典典

Struts2 devMode在Submit标签中使用“ key”属性时发生异常

jsp

我使用的Struts2已devMode打开,以捕获尽可能多的警告和错误。现在我遇到了一些严重通知,仅在devMode中进行了通知。

我正在使用submit标记,并且包含 key
属性来"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属性:

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

依次生成HTML代码:

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

而SEVERE通知不见了。

在第一种情况下,我有做错什么吗?


阅读 473

收藏
2020-06-08

共1个答案

小编典典

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

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

第一个name是用于解析OGNL表达式以将值设置为值堆栈的属性。只要您没有这样的值,就抛出OGNL异常,但是参数拦截器用于捕获和忽略这种异常。而且只有在devMode打开电源后,您才能在日志中看到此异常。

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

2020-06-08