Как сделать «вложенный, если» в JSTL для Java JSP? - PullRequest
12 голосов
/ 27 марта 2011

Я хочу сделать что-то вроде следующего:

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

Это вообще возможно? При попытке запуска выдается исключение.

Спасибо.

Ответы [ 3 ]

17 голосов
/ 27 марта 2011

Вам нужно сделать это больше так:

<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 является плохим языком для реализации многоуровневых условных операторов.

10 голосов
/ 27 марта 2011

Вы можете использовать несколько <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>
0 голосов
/ 26 июня 2012

Я согласен с @ BalusC - вы можете упростить утверждение. Помните, что операторы c:when являются взаимоисключающими, как и блоки if-else if.

Спецификация JSTL 1.2 гласит, что c:choose должен быть родительским по крайней мере для одного оператора c:when, и что c:when всегда должен предшествовать по крайней мере одному оператору c:otherwise с таким же немедленным родитель. По сути, это также означает, что каждый c:when должен иметь c:otherwise после него внутри c:choose, а c:choose должен окружать любой c:when + c:otherwise. Из того, что я вижу, спецификация не относится к вложению c:choose элементов, поэтому я не знаю, работает ли это - но я не думаю, что вам когда-либо придется их вкладывать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...