将另一个JSTL标记的结果指定为一个JSTL标记的值

Noo*_*z42 13 java jsp jstl el

我有这个,这是有效的:

<c:choose>
    <c:when test="${sometest}">
        Hello, world!
    </c:when>
    <c:otherwise>
        <fmt:message key="${page.title}" />
    </c:otherwise>
</c:choose>
Run Code Online (Sandbox Code Playgroud)

我想把它改成这个:

<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
Run Code Online (Sandbox Code Playgroud)

但当然以下行不正确:

<c:set var="somevar" scope="page" value="<fmt:message key="${page.title}">"
Run Code Online (Sandbox Code Playgroud)

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

Bal*_*usC 25

fmt:message有一个var属性,可以有效地完成你想要的.

 <fmt:message key="${page.title}" var="somevar" />
Run Code Online (Sandbox Code Playgroud)

就这样.为JSTL tlddoc添加书签,它可能会派上用场.


Tim*_*per 9

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

<c:set var="somevar" scope="page">
  <fmt:message key="${page.title}"/>
</c:set>
Run Code Online (Sandbox Code Playgroud)


小智 5

你必须这样做:

<c:set var="title"><fmt:message key="${page.title}"></c:set>
<c:set var="somevar" scope="page" value="${title}" />
Run Code Online (Sandbox Code Playgroud)

既然你不能<fmt:message .. />在那个地方使用我的经验,就像你建议的那样嵌套.或者使用@balusc建议;-)