【问题标题】:How to pass java variables from scriptlets to c:when expression in jstl?如何将java变量从scriptlet传递给c:jstl中的表达式?
【发布时间】:2014-11-11 16:29:24
【问题描述】:

在 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>

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

【问题讨论】:

    标签: java jsp jstl scriptlet


    【解决方案1】:

    在 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>
    

    更多信息:


    作为建议,停止使用小脚本。将 JSP 中的业务逻辑移至控制器,将视图逻辑移至 EL、JSTL 和其他标签,如 &lt;display&gt;。更多信息:How to avoid Java code in JSP files?

    【讨论】:

    【解决方案2】:

    JSP 的默认作用域是页面。如果您想将 scriplet 的变量用于 JSTL,请使用以下代码。

    <%
        boolean a = true;
        boolean b = false;
        pageContext.setAttribute("a", a);
        pageContext.setAttribute("b", b);
    %>
    

    那么它就可以在JSTL中使用了。

    【讨论】:

      猜你喜欢
      • 2018-05-03
      • 2019-01-12
      • 2015-04-12
      • 2013-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-23
      相关资源
      最近更新 更多