如何将java变量从scriptlet传递到c:当jstl中的表达式?

Pet*_*rs_ 5 java jsp jstl scriptlet

在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>
Run Code Online (Sandbox Code Playgroud)

看起来它并没有进入整个区块.

Lui*_*oza 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>
Run Code Online (Sandbox Code Playgroud)

更多信息:


作为建议,请停止使用scriptlet.将JSP中的业务逻辑移动到控制器,将视图逻辑移动到EL,JSTL和其他标签中<display>.更多信息:如何避免JSP文件中的Java代码?