【问题标题】:Struts 2 s:if with getTextStruts 2 s:if 与 getText
【发布时间】:2016-01-16 06:12:44
【问题描述】:

我想查看消息包中是否存在消息键。所以我在下面尝试了,但都没有奏效:

<s:if test=" getText('site.message') == 'site.message'">
<s:if test=" getText('site.message').equals('site.message')">
<s:if test=" %{getText('site.message').equals('site.message')}">

但是这种解决方法可以正常工作:

<s:text name="site.message" var="test"/>
<s:if test=" #test=='site.message'">
   Please consider: <s:text name="site.message"/>
</s:if>

那么是否可以省略#test 变量并在s:if 中完成所有工作

【问题讨论】:

    标签: jsp if-statement struts2 internationalization


    【解决方案1】:

    如果您将&lt;s:text&gt; 的正文而不是&lt;s:if&gt; 标记的正文用作您的默认消息,这是可能的。来自文档页面

    如果在属性文件中找不到指定的消息,则标签的正文将用作默认消息。如果没有使用正文,则将搜索堆栈,如果返回值,则将其写入输出。如果在栈中没有找到值,则消息的键将被写出。然后你可以使用另一个键来设置默认消息。

    等效代码

    <s:text name="site.message"><s:text name="error.message"/></s:text>
    

    还要考虑getText(String aTextName, String defaultValue) 的默认值。

    根据键获取消息,或者,如果未找到消息,则返回提供的默认值。

    然后就可以使用了

    <s:if test="getText('site.message','') != ''">
       Please consider: <s:text name="site.message"/>
    </s:if>
    <s:else>
       <s:text name="error.message"/>
    </s:else>
    

    或使用hasKey(String key)检查密钥

    检查消息键是否存在。

    <s:if test="hasKey('site.message')">
       Please consider: <s:text name="site.message"/>
    </s:if>
    <s:else>
       <s:text name="error.message"/>
    </s:else>
    

    【讨论】:

    • 我收到此警告 The default value expression 'Please consider: site.message' was evaluated and did not match a property. The literal value 'Please consider: site.message' will be used. 并且页面显示 Please consider: site.message 。我正在使用 struts 2.3.24.1
    • OGNL 应该可以工作,我不知道什么对你不起作用。
    • s:text 会将其主体评估为 OGNL,因此语法必须为 &lt;s:text name="site.message"&gt;'please consider ' + getText("site.message")&lt;/s:text&gt;。但它没有帮助,好像密钥不存在结果将是please consider: site.messagehasKey 工作正常,语法完全符合我的需要:) 谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-17
    相关资源
    最近更新 更多