<c:if> jstl条件不起作用

时间:2016-06-12 03:18:05

标签: java jsp java-ee web jstl

java ee编程中的初学者,我在会话bean JSTL 条件进行验证>如果登录状态为true或false。

<c:choose>
  <c:if test="${Boolean.valueOf(Session.getLogStat())}">
    ${Session.getLogStat()}
  </c:if>
  <c:if test="${Boolean.valueOf(!Session.getLogStat())}">
    <a href="login">login</a>
  </c:if>
</c:choose>

当我将 if 替换为

<c:choose>
  <c:when test="${Boolean.valueOf(Session.getLogStat())}">
    ${Session.getLogStat()}
  </c:when>
  <c:when test="${Boolean.valueOf(!Session.getLogStat())}">
    <a href="login">login</a>
  </c:when>
</c:choose>

我很抱歉我的英语不好。

2 个答案:

答案 0 :(得分:0)

第一个肯定是错的。

<c:choose>必须有一个或多个<c:when>标记,并且可选地嵌套在<c:otherwise>标记内。

<c:if>是一个独立的构造。

Session.getLogStat()的返回值是多少?如果是字符串"true""false",那么Boolean.valueOf()是正确的,但这似乎不太可能。也许你认为它是null测试?

无论如何,您应该使用<c:otherwise><c:out>

<c:choose>
  <c:when test="${Session.getLogStat() != null}">
    <c:out value="${Session.getLogStat()}"/>
  </c:when>
  <c:otherwise>
    <a href="login">login</a>
  </c:otherwise>
</c:choose>

我通常会把它折叠成一个多路if语句,在这种情况下是一个简单的if-else语句:

<c:choose><c:when test="${Session.getLogStat() != null}">
  <c:out value="${Session.getLogStat()}"/>
</c:when><c:otherwise>
  <a href="login">login</a>
</c:otherwise></c:choose>

答案 1 :(得分:-1)

如果您的问题仍然存在(您在答案中说:但代码无效...)

我建议您在servlet中转换bean。 servlet将在请求中设置您的参数。然后你在JSP中测试你想要的东西。

public class ExampleServlet extends HttpServlet {


    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {


                Session MyObject = new Session();
                 boolean myParam=MyObject.getLogStat();  



  String s1 = Boolean.toString(myParam);


       try {


        request.setAttribute("I_WANT_TO_TEST", s1);

        RequestDispatcher view = request.getRequestDispatcher("My.jsp");
        view.forward(request, response); 


         } catch (Exception ex) {
            System.out.println(ex.getMessage());
        }


    }}

然后在你的JSP中

  <% String msg2=(String)request.getAttribute("I_WANT_TO_TEST");%>

        <% if ( (msg2==null || msg2.isEmpty()) ) { %> 
         // WHAT YOU ARE NOT LOGED IN             
        <% } else if(msg2!=null) { %>

         <% }  %>