在 JSP 表达式中访问 JSTL <c:forEach> varStatus
Accessing JSTL <c:forEach> varStatus in JSP Expression
我有一个导入接口的 JSP。界面有一个String[] QUESTION_ARRAY
.
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ page import="com.mypackage.message.Questions"%>
<table>
<c:forEach var="question" items="<%=Questions.QUESTION_ARRAY%>" varStatus="ctr">
<tr>
<td><%=Questions.QUESTION_ARRAY[ctr.index]%></td>
</tr>
</c:forEach>
</table>
在[ctr.index]
中,表示ctr
未解决。我如何在表达式中访问它?
如果您已经在迭代问题,为什么还需要索引?为什么使用 JSTL 进行循环并使用 scriptlet 进行输出?
如果我对你的场景的理解正确,这应该如下所示:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<bean:define id="questions" type="ph.edu.iacademy.message.Questions" />
<table>
<c:forEach var="question" items="questions.QUESTION_ARRAY" >
<tr>
<td>${question.text}</td>
</tr>
</c:forEach>
</table>
如果您真的想访问状态,那么您可以这样做:
${ctr.index}
在页面作用域中创建的变量ctr
。要访问 JSP 表达式中的页面范围变量,您可以使用 pageContext
隐式对象。
<table>
<% pageContext.setAttribute("questions", Questions.QUESTION_ARRAY); %>
<c:forEach var="question" items="${questions}" varStatus="ctr">
<tr>
<td>
<%=Questions.QUESTION_ARRAY[((LoopTagStatus)pageContext.getAttribute("ctr")).getIndex()]%>
</td>
</tr>
</c:forEach>
</table>
但是如果你将它与 JSTL forEach
标签一起使用,它看起来很难看。最好构建 JSP EL 表达式。
<table>
<% pageContext.setAttribute("questions", new Questions(){}.QUESTION_ARRAY); %>
<c:forEach var="question" items="${questions}" varStatus="ctr">
<tr>
<td>
${questions[ctr.index]}
</td>
</tr>
</c:forEach>
</table>
如果您使用 forEach
标记的 var
属性,则即使此表达式也不是必需的,它定义了引用数组元素的变量,也在页面范围内。您可以像
一样访问它
<table>
<% pageContext.setAttribute("questions", Questions.QUESTION_ARRAY); %>
<c:forEach var="question" items="${questions}" >
<tr>
<td>
${question}
</td>
</tr>
</c:forEach>
</table>
另请参阅此问题以了解其他替代方案:
How to reference constants in EL?
我有一个导入接口的 JSP。界面有一个String[] QUESTION_ARRAY
.
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ page import="com.mypackage.message.Questions"%>
<table>
<c:forEach var="question" items="<%=Questions.QUESTION_ARRAY%>" varStatus="ctr">
<tr>
<td><%=Questions.QUESTION_ARRAY[ctr.index]%></td>
</tr>
</c:forEach>
</table>
在[ctr.index]
中,表示ctr
未解决。我如何在表达式中访问它?
如果您已经在迭代问题,为什么还需要索引?为什么使用 JSTL 进行循环并使用 scriptlet 进行输出?
如果我对你的场景的理解正确,这应该如下所示:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<bean:define id="questions" type="ph.edu.iacademy.message.Questions" />
<table>
<c:forEach var="question" items="questions.QUESTION_ARRAY" >
<tr>
<td>${question.text}</td>
</tr>
</c:forEach>
</table>
如果您真的想访问状态,那么您可以这样做:
${ctr.index}
在页面作用域中创建的变量ctr
。要访问 JSP 表达式中的页面范围变量,您可以使用 pageContext
隐式对象。
<table>
<% pageContext.setAttribute("questions", Questions.QUESTION_ARRAY); %>
<c:forEach var="question" items="${questions}" varStatus="ctr">
<tr>
<td>
<%=Questions.QUESTION_ARRAY[((LoopTagStatus)pageContext.getAttribute("ctr")).getIndex()]%>
</td>
</tr>
</c:forEach>
</table>
但是如果你将它与 JSTL forEach
标签一起使用,它看起来很难看。最好构建 JSP EL 表达式。
<table>
<% pageContext.setAttribute("questions", new Questions(){}.QUESTION_ARRAY); %>
<c:forEach var="question" items="${questions}" varStatus="ctr">
<tr>
<td>
${questions[ctr.index]}
</td>
</tr>
</c:forEach>
</table>
如果您使用 forEach
标记的 var
属性,则即使此表达式也不是必需的,它定义了引用数组元素的变量,也在页面范围内。您可以像
<table>
<% pageContext.setAttribute("questions", Questions.QUESTION_ARRAY); %>
<c:forEach var="question" items="${questions}" >
<tr>
<td>
${question}
</td>
</tr>
</c:forEach>
</table>
另请参阅此问题以了解其他替代方案:
How to reference constants in EL?