一位同事和我刚刚遇到JSP的情况,并想知道Stack Overflow是否可以帮助我们了解正在发生的事情。
我们遇到了代码如下的逻辑问题:
<c:if test="test something">
<c:choose>
<c:when test="test something else">
<c:if test="yet again test"> //#1
<c:set "set some stuff"/>
</c:if>
</c:when>
<c:otherwise> //#2
<c:if test="testing the else">
<c:set "set for the else"/>
</c:if>
</c:otherwise>
</c:choose>
</c:if>
我们注意到的是,如果#1的测试失败,我们将永远不会进入其他声明(#2)。我们通过将(#1)与上面的测试相结合来解决这个问题。
有人可以向我解释为什么会这样吗?内部(#1)是否失败了将条件的逻辑全部放在一起?
提前致谢。
答案 0 :(得分:0)
不确定您要执行的操作,但您的代码已损坏。 c:otherwise
用于c:choice
,而不是c:if
请参阅here
中的代码示例<c:choose>
<c:when test="${salary <= 0}">
Salary is very low to survive.
</c:when>
<c:when test="${salary > 1000}">
Salary is very good.
</c:when>
<c:otherwise>
No comment sir...
</c:otherwise>
</c:choose>
和if:
<c:if test="${salary > 2000}">
<p>My salary is: <c:out value="${salary}"/><p>
</c:if>
请注意,c:if
不支持c:else
或c:otherwise
答案 1 :(得分:0)
你的<c:when test="test something else">
条件满足的点,它的兄弟<c:otherwise>
,已离开执行流程。
这类似于下面的java if-else loop
c:when -> if(test something else){
//whatever code including your nested if->yet again test
c:otherwise -> }else {
// otherwise code for testing the else
}
所以在这种情况下,这是正常的if-else。当您的c:when
或if
满意时,c:otherwise
或else
不在执行流程中