jstl有条件不工作

时间:2014-04-07 21:50:21

标签: jstl conditional-statements

我试图将我的Java代码与JSP文件分开,而且我遇到了一些问题。我试图找出用户是否是来宾,然后打印相应的操作EG登录表单或用户名。

继承我的index.jsp文件:

<% if(view.guest) { %>
<%= "Scriptlet: Login Form Here" %>
<% } else { %>
<%= "Scriptlet: User Name Here" %>
<% } %>

<br/><br/>

<c:choose>
<c:when test="${view.guest eq true}">
JSTL Tag: Login Form Here
</c:when>
<c:otherwise>
JSTL Tag: User Name Here
</c:otherwise>
</c:choose>

这会产生以下输出:

Scriptlet:登录表单

JSTL标记:用户名

正如您所看到的,Scriptlet产生了预期的结果,但JSTL标签产生相反的结果。事实上,如果我将JSTL的条件反转为false(用于调试目的),它仍会产生相同的结果&#34; JSTL标签:用户名&#34;

Btw view.guest是对象视图的公共布尔变量。

1 个答案:

答案 0 :(得分:0)

JSP EL无法访问本地变量。它访问页面,请求,会话或应用程序范围的属性。它还假设您不使用公共字段(永远不应该使用它),但尊重Java Bean约定。

而且,就像在Java中一样,将布尔值与true进行比较是不必要的。你只需要

<c:when test="${view.guest}">

如果存在名为&#34; view&#34;的页面,请求,会话或应用程序属性,并且公共getGuest()isGuest()方法返回true,则条件将评估为true。

如果您根本没有使用scriptlet,那么您的页面中永远不会有局部变量,并且您永远不会遇到此问题。