【问题标题】:Assigning outcome of another JSTL tag as value of one JSTL tag将另一个 JSTL 标记的结果分配为一个 JSTL 标记的值
【发布时间】:2011-02-26 01:50:45
【问题描述】:

我有这个,它正在工作:

<c:choose>
    <c:when test="${sometest}">
        Hello, world!
    </c:when>
    <c:otherwise>
        <fmt:message key="${page.title}" />
    </c:otherwise>
</c:choose>

我想把它改成这样:

<c:choose>
    <c:when test="${sometest}">
        <c:set var="somevar" scope="page" value="Hello, world!"/>
    </c:when>
    <c:otherwise>
        <c:set var="somevar" scope="page" value="<fmt:message key="${page.title}">"
    </c:otherwise>
</c:choose

当然,下面这行是不正确的:

<c:set var="somevar" scope="page" value="<fmt:message key="${page.title}">"

如何将调用 fmt:message 产生的字符串分配给 somevar 变量?

【问题讨论】:

    标签: java jsp jstl el


    【解决方案1】:

    fmt:message 也有一个 var 属性,它可以有效地满足您的需求。

     <fmt:message key="${page.title}" var="somevar" />
    

    就是这样。收藏JSTL tlddoc,它可能会派上用场。

    【讨论】:

    • 再次感谢您...有趣的是,有三个答案和三种不同的方法:)
    • 不客气。其他两个答案在技术上是相同的,并且实际上确实是相同的。这只是更多的代码,仅证明var属性在大多数JSTL fmt 标签中的存在和使用是相对未知的;)
    • 如果它所做的只是设置一个变量,为什么它被称为fmt:message。是否以任何方式格式化或修改变量?
    • @Byron:因为默认情况下,当您省略var 属性时,它会显示与密钥关联的消息。
    • 我们这样设置的变量的作用域是什么?
    【解决方案2】:

    也可以使用正文的内容来指定要设置的值,而不是通过 value 属性:

    <c:set var="somevar" scope="page">
      <fmt:message key="${page.title}"/>
    </c:set>
    

    【讨论】:

      【解决方案3】:

      你必须处理:

      <c:set var="title"><fmt:message key="${page.title}"></c:set>
      <c:set var="somevar" scope="page" value="${title}" />
      

      由于您不能在那个地方使用&lt;fmt:message .. /&gt;,这是我的经验,与您建议的嵌套有关。或者接受@balusc 的建议;-)

      【讨论】:

      • André van Toly:+1,也谢谢你...我选择了 BalusC 指出的 fmt 标签的较短 var 属性。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-08
      • 1970-01-01
      • 2016-03-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多