Как сделать "вложенным" в JSTL для Java JSP?
Я хочу сделать что-то вроде следующего:
<c:choose>
<c:when test="${empty example1}">
</c:when>
<c:otherwise>
<c:when test="${empty example2}">
</c:when>
<c:otherwise>
</c:otherwise>
</c:otherwise>
</c:choose>
Возможно ли это? Я получаю исключение, возникшее при попытке выполнить.
Спасибо.
Ответы
Ответ 1
Вам нужно сделать это больше:
<c:choose>
<c:when test="${empty example1}">
<!-- do stuff -->
</c:when>
<c:otherwise>
<c:choose>
<c:when test="${empty example2}">
<!-- do different stuff -->
</c:when>
<c:otherwise>
<!-- do default stuff -->
</c:otherwise>
</c:choose>
</c:otherwise>
</c:choose>
Показанная здесь многословие является хорошим примером того, почему XML - плохой язык для реализации многоуровневых условных операторов.
Ответ 2
Вы можете использовать несколько <c:when>
в <c:choose>
.
<c:choose>
<c:when test="${empty example1}">
</c:when>
<c:when test="${empty example2}">
</c:when>
<c:otherwise>
</c:otherwise>
</c:choose>
Ответ 3
Я согласен с @BalusC - вы можете упростить утверждение. Помните, что операторы c:when
являются взаимоисключающими, например if-else if
blocks.
JSTL 1.2 spec утверждает, что c:choose
должен быть родителем хотя бы одного оператора c:when
, а c:when
должен всегда предшествует по крайней мере одному оператору c:otherwise
с тем же непосредственным родителем. По сути, это также означает, что каждый c:when
должен иметь c:otherwise
, следуя за ним внутри c:choose
, а a c:choose
должен окружать любой c:when
+ c:otherwise
. Из того, что я вижу, спецификация не относится к вложенным элементам c:choose
, поэтому я не знаю, работает ли она, но я не думаю, что вы когда-нибудь будете вынуждены вставлять их.