Присвоение результата другого тега JSTL как значения одного тега JSTL

У меня есть это, которое работает:

<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}">"

Как я могу присвоить переменной somevar строку, вызванную вызовом fmt: message?

Ответ 1

fmt:message имеет атрибут var, который эффективно выполняет то, что вы хотите.

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

Это все. Закладка JSTL tlddoc, это может пригодиться.

Ответ 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}" />

Поскольку вы не можете использовать <fmt:message .. /> на этом месте, это мой опыт, связанный с вложением, как вы и предполагали. Или пойти с предложением @balusc; -)