如何在JSTL for Java JSP中执行“嵌套if”?

时间:2011-03-27 04:11:10

标签: java jsp jstl

我想做以下事情:

<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 个答案:

答案 0 :(得分:17)

你需要更像这样:

<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为实现多级条件语句的不良语言的一个很好的例子。

答案 1 :(得分:10)

您可以在<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>

答案 2 :(得分:0)

我同意@BalusC - 您可以简化声明。请记住,c:when语句是互斥的,例如if-else if块。

JSTL 1.2 spec表示c:choose必须是至少一个c:when语句的父级,并且c:when必须始终位于至少一个c:otherwise语句之前与同一直系亲。从本质上讲,这也意味着每个c:when必须在c:otherwise内跟随c:choose,而c:choose必须包围任何c:when + c:otherwise }。从我所看到的,规范并不是指嵌套c:choose元素,所以我不知道它是否有效 - 但我认为你不会被迫嵌套它们。