2

我想我需要使用<s: property>inside <s:text>,但这当然是不可能的。

情况如下:我有一个 .jsp 需要显示不同数量的操作消息。通常,您会在您的 java 类中添加这些操作消息,如下所示:

action.addActionMessage("this is a string");
action.addActionMessage("this is another string");

但是,我不喜欢在 java 类中硬编码我的消息,我想在属性文件中定义它,如下所示:

Java:
action.addActionMessage("menu.message1");
action.addActionMessage("menu.message2");

Properties:
menu.message1 = this is a string
menu.message2 = this is another string

当然,java action 类不能进入属性文件,只有一个struts标签可以。所以一个我的 .jsp 包含这个:

<s:if test="hasActionMessages()">
<s:iterator value="actionMessages">

<div class="loginErrorMessage"> 
    <s:text name="<s:property>"/>
</div>

</s:iterator>
</s:if>

我使用这个迭代构造,所以我可以控制消息的布局。<s:property/>应该返回 actionmessage 本身,我选择它等于属性文件中条目的键。如果这种嵌套真的有效,我们会得到:

      <s:text name="<s:property/>"/>   
==>   <s:text name="menu.message1"/>   
==>   this is a string

我可以使用 OGNL 来解决这个问题吗?我尝试了一些 %{} 和 ${} 的东西,但我不知道 value/var 的名称来获取 valuestack 的消息字符串?

谢谢!

4

1 回答 1

3

你最初的陈述是错误的

当然java动作类可以进入属性文件

您需要扩展ActionSupport,然后您可以简单地使用该getText()方法在资源包中查找文本。

如果你真的想用你的黑客(我强烈建议你不要):

<s:iterator value="actionMessages" var="key">
    <div class="loginErrorMessage"> 
        <s:text name="%{#key}"/>
    </div>
</s:iterator>

注意

如果您正在使用ActionSupport.addActionMessage(),您可以使用适当的标签来自动显示所有操作消息 - <s:actionmessage />。它甚至会检查它们是否存在,这样你就可以把它放在你的 jsp 中并忘记它。

于 2013-10-07T15:42:04.390 回答