我想我需要在<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!
答案 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中而忘掉它。