gpt4 book ai didi

java - JSTL c :set not working as expected

转载 作者:行者123 更新时间:2023-12-03 20:23:01 25 4
gpt4 key购买 nike

我有一个 JSTL 循环,我在其中尝试检查给定变量是否为空或没有动态变量名。当我将 c:set 与页面范围一起使用时,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 block 时,测试总是失败,但是它对 A 和 F 成功,因为它应该在 block 中。我很困惑,无法在任何地方找到帮助。

最佳答案

它失败了,因为 HTML 在 JSTL 运行时没有运行。您有效地将 Java String A 传递给它,而不是所需的字符 A ,后者将基于 HTML 实体 A 表示; 在 Java/JSP/JSTL 完成其工作后,当 HTML 被 web 浏览器检索和解析时。请注意,您的 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[] 并将其设置为应用程序属性即可。

关于java - JSTL c :set not working as expected,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15620876/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com