我有一个导入接口的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
尚未解决。如何在表达式中访问它?
答案 0 :(得分:3)
在页面范围中创建的变量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>
如果使用var
标记的forEach
属性来定义引用数组元素的变量,即使在页面范围内,也不需要此表达式。您可以像
<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?
答案 1 :(得分:2)
如果您已经在迭代这些问题,为什么还需要索引?为什么使用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}