JSP <c:choose> <c:when> <c:if>会发生奇怪的事情

时间:2015-07-17 15:53:17

标签: jsp

一位同事和我刚刚遇到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)是否失败了将条件的逻辑全部放在一起?

提前致谢。

2 个答案:

答案 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:elsec: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:whenif满意时,c:otherwiseelse不在执行流程中