在 getText() 中使用 Struts2 s:set 变量

Using Struts2 s:set variables with getText()

将 Struts2 与 JSP 结合使用。以下代码工作正常:

<s:if test="foo == bar">
    <s:set var="keyValue">message.string1</s:set>
</s:if>
<s:else>
    <s:set var="keyValue">message.string2</s:set>
</s:else>

<s:text name="%{keyValue}"/>

即根据keyValue的值,从资源文件中查找message.string1message.string2并正确输出到结果HTML页面。

但是,如 Struts tag documentation 底部所述,对于属性值中的 i18n,我不能使用 Struts 文本标记,而必须使用 getText('...')

<s:submit value="getText('message.string1')" ../>

问题是,我无法在上面的 getText() 调用中解决 %{keyValue},无论我尝试什么语法:getText('%{keyValue}')getText(%{keyValue})getText(keyValue), getText('keyValue') 它最终被评估为 null。这是我的语法错误还是根本无法完成?如果必须的话,我知道我可以返回使用 <s:if><s:else>,每个标签下都有一个提交标签:

<s:if test="foo == bar">
    <s:submit value="getText('message.string1')" ../>
</s:if>
<s:else>
    <s:submit value="getText('message.string2')" ../>
</s:else>

...但我想尽可能避免重复。

虽然普通 keyValue 在大多数情况下都有效,但最好在 <s:set> 标签的 var 值前加上 # 前缀。 您应该只在整个表达式周围使用一对 %{}

<s:submit value="%{getText(#keyValue)}" />