У меня есть это, которое работает:
<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?
fmt: message
также имеет атрибут var
, который эффективно выполняет то, что вы хотите.
<fmt:message key="${page.title}" var="somevar" />
Вот и все. Добавьте в закладки JSTL tlddoc , он может пригодиться.
Также можно указать значение для установки с помощью содержимого тела, а не через атрибут value:
<c:set var="somevar" scope="page">
<fmt:message key="${page.title}"/>
</c:set>
Вам придется иметь дело с:
<c:set var="title"><fmt:message key="${page.title}"></c:set>
<c:set var="somevar" scope="page" value="${title}" />
Поскольку вы не можете использовать
в этом месте, по моему опыту, он связан с вложением, как вы предложили. Или воспользуйтесь предложением @balusc; -)