在jstl中使用scriptlet变量的正确方法是什么? 我不知道我的代码有什么问题:
<%
boolean a = true;
boolean b = false;
%>
<c:choose>
<c:when test="${a}">
<c:set var="x" value="It's true"/>
</c:when>
<c:when test="${b}">
<c:set var="x" value="It's false"/>
</c:when>
</c:choose>
看起来它并没有进入整个区块。
答案 0 :(得分:8)
在JSTL中无法看到scriptlet中的变量,因为表达式语言(JSTL中使用的${}
之间的东西)将在页面,请求,会话或应用程序中查找属性。您必须至少将scriptlet中的变量存储在其中一个范围中,然后使用它。
这是一个例子:
<%
boolean a = true;
request.setAttribute("a", a);
%>
<c:if test="${a}">
<c:out value="a was found and it's true." />
</c:if>
更多信息:
作为建议,请停止使用scriptlet。将JSP中的业务逻辑移动到控制器,将视图逻辑移动到EL,JSTL和其他标签,如<display>
。更多信息:How to avoid Java code in JSP files?
答案 1 :(得分:0)
JSP的默认范围是page。如果你想将scriplet的变量用于JSTL,请使用以下代码。
<%
boolean a = true;
boolean b = false;
pageContext.setAttribute("a", a);
pageContext.setAttribute("b", b);
%>
然后它将在JSTL中使用。