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

时间:2014-09-17 14:54:43

标签: 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>

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

2 个答案:

答案 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中使用。