JSTL c:设置不按预期工作

时间:2013-03-25 17:16:35

标签: java jstl

我有一个JSTL循环,我试图通过动态变量名检查给定变量是否为空。当我使用c:set with page scope时,if语句无法访问该变量。但是,当我使用<% pageCotnext.setAttribute(...); %>进行设置时,变量可用。

<%
pageContext.setAttribute("alphaParA", "test");
pageContext.setAttribute("alphaParF", "test");
int i = 0;
%>
<ul class="alphadex_links">
    <c:forEach var="i" begin="0" end="25" step="1" varStatus="status">
        <c:set var="currentLetter" scope="page">&#${i+65}</c:set>
        <c:set var="currentPar" scope="page">alphaPar${currentLetter}</c:set>
        <% pageContext.setAttribute("currentPar", "alphaPar" + (char)('A' + i++)); %>
        <li>
            <c:choose>
                <c:when test="${not empty pageScope[currentPar]}">

当我删除pageContext.setAttribute块时,测试总是失败,但是当块进入时它对A和F成功。我很困惑,无法在任何地方找到帮助。

1 个答案:

答案 0 :(得分:0)

它失败,因为在JSTL运行时HTML不会运行。您正在有效地将Java字符串&#65传递给它而不是所需的字符A,当HTML检索并解析HTML时,它将基于HTML实体&#65;表示。 Java / JSP / JSTL完成其工作后的webbrowser。请注意,您的HTML实体缺少结束分号,但这不是导致具体问题的原因。

至于具体的功能要求,对不起,你对EL运气不好。它不支持char。你最好的办法是处理这样的字符串:

<c:forEach items="${fn:split('A,B,C,D,E,F,G,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z', ',')}" var="currentLetter">
    <c:set var="currentPar" value="alphaPar${currentLetter}" />
    ${pageScope[currentPar]}
</c:forEach>

如有必要,只需在Java端自动生成String[]字母,并将其设置为应用程序属性。