Struts2 在提交标签中使用 "key" 属性时出现 devMode 异常

Struts2 devMode Exception when using "key" attribute in submit tag

我正在使用 Struts2 并启用 devMode 以捕获尽可能多的警告和错误。现在我遇到了一些仅在 devMode 中通知的严重通知。

我正在使用 submit 标签并包含 key 属性以从名为 属性 的 "Entrar" 中获取按钮文本 "Entrar" global.BOTON_LOGIN。该按钮是调用映射到 class 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>

严重通知消失了。

第一种情况我哪里做错了吗?

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

Set the key (name, value, label) for this particular component

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

通常,如果您在 Struts 标签中使用 key 属性,您应该使用相同的 属性 名称作为属性文件中的键,以便正确绑定操作属性。