【发布时间】:2010-04-28 22:28:27
【问题描述】:
我想做一个测验,我想在提交表单后输出一系列问题。
我知道要使用我认为的 bean,但我该怎么做呢?
谢谢
【问题讨论】:
我想做一个测验,我想在提交表单后输出一系列问题。
我知道要使用我认为的 bean,但我该怎么做呢?
谢谢
【问题讨论】:
为此使用JSTL <c:forEach>。 JSTL 支持取决于相关的 servlet 容器。例如Tomcat 不附带开箱即用的 JSTL。您可以通过将jstl-1.2.jar 放入您的Web 应用程序的/WEB-INF/lib 来安装JSTL。您可以在 JSP 中使用 JSTL core tags,方法是根据 JSP 文件顶部的文档声明它:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
您可以在<c:forEach> 标记的items 属性中找到一个数组(Object[]) 或List。您可以使用var 属性定义每个项目,以便您可以在循环内访问它:
<c:forEach items="${questions}" var="question">
<p>Question: ${question}</p>
</c:forEach>
这与普通 Java 中的以下内容基本相同:
for (String question : questions) { // Assuming questions is a String[].
System.out.println("<p>Question: " + question + "</p>");
}
【讨论】:
使用 JSP 2.0,它可能看起来像这样:
<%
request.setAttribute( "questions", new String[]{"one","two","three"} );
%>
<c:forEach var="question" items="${questions}" varStatus="loop">
[${loop.index}]: ${question}<br/>
</c:forEach>
问题将在处理提交的代码中而不是在 JSP 中设置。
如果您使用的是 JSP 1.2:
<c:forEach var="question" items="${questions}" varStatus="loop">
<c:out value="[${loop.index}]" />: <c:out value="${question}"/><br/>
</c:forEach>
使用 EL 和 JSTL,如果您将对象存储在数组中而不只是字符串中,您将能够访问任何 Question 对象属性:
${question.myProperty}
【讨论】:
varStatus="loop" 定义了可以在循环体中使用的状态对象的名称,在本例中为loop。它可以是您喜欢的任何东西。状态对象的类型为javax.servlet.jsp.jstl.core.LoopTagStatus。在上面的示例中,loop.index 在循环体中被调用以检索当前行的索引。