我需要在<s:text> </s:text> </s:>中使用<s:property =“”>

时间:2013-10-07 15:32:17

标签: java struts2

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

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

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动作类无法进入属性文件,只有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来解决这个问题吗?我尝试了一些%{}和$ {}的东西,但我不知道值/ var的名称来获取valuestack消息的字符串?

THX!

1 个答案:

答案 0 :(得分:3)

您的初始陈述错误

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

您需要扩展ActionSupport,然后您只需使用getText()方法查找资源包中的文本。

如果你真的想和你的黑客一起去(我强烈建议你不要):

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

<强> N.B。

如果您使用ActionSupport.addActionMessage(),则可以使用相应的标记自动显示所有操作消息 - <s:actionmessage />。它甚至会检查它们是否存在,这样你就可以将它放入你的jsp中而忘掉它。