将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.string1
或message.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>
...但如果可能的话,我想避免重复。
答案 0 :(得分:0)
虽然普通keyValue
在大多数情况下都有效,但最好将var
标记的<s:set>
值加上#
。
你应该在整个表达式中只使用一对%{}
。
<s:submit value="%{getText(#keyValue)}" />