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>
答案 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) { %>
<% } %>