我试图将我的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是对象视图的公共布尔变量。
答案 0 :(得分:0)
JSP EL无法访问本地变量。它访问页面,请求,会话或应用程序范围的属性。它还假设您不使用公共字段(永远不应该使用它),但尊重Java Bean约定。
而且,就像在Java中一样,将布尔值与true进行比较是不必要的。你只需要
<c:when test="${view.guest}">
如果存在名为&#34; view&#34;的页面,请求,会话或应用程序属性,并且公共getGuest()
或isGuest()
方法返回true,则条件将评估为true。
如果您根本没有使用scriptlet,那么您的页面中永远不会有局部变量,并且您永远不会遇到此问题。