使用Struts2:使用getText()设置变量

时间:2016-06-17 18:02:41

标签: java jsp struts2 ognl valuestack

将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')" ../>

问题是,我无法在上述%{keyValue}调用中解析getText(),无论我尝试何种语法: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>

...但如果可能的话,我想避免重复。

1 个答案:

答案 0 :(得分:0)

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

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