exam 对象的实例必须在 EL 范围内,例如 pageScope。假设 exam 对象引用在 pageScope 中被称为“考试”,那么以下 EL 将调用 getHarfTo 方法:
${exam.harfTo}
注意:您不能调用 setter 方法。
为了扩展上述内容(仅作为示例),我们可以使用 scriptlet 在pageScope 中设置exam 实例(注意不推荐使用scriptlet,这只是一个用于说明的示例)
<%
com.example.Exam exam = new com.example.Exam();
pageContext.setAttribute("exam", exam, PageContext.PAGE_SCOPE);
%>
现在我们可以通过 EL 访问考试对象:${exam.harfTo}
考试对象可以添加到其他范围,例如请求范围和会话范围。
Scriptlet 和 EL
<%
java.util.ArrayList cities = new java.util.ArrayList();
cities.add("NYC");
cities.add("SFO");
%>
在 scriptlet 中创建的变量不能被 EL 直接访问。因此,城市变量不能在 JSTL 标记中使用。
为此,我们首先需要将其置于某个范围内。例如:
<%
java.util.ArrayList cities = new java.util.ArrayList();
cities.add("NYC");
cities.add("SFO");
pageContext.setAttribute("cities", cities, PageContext.PAGE_SCOPE);
%>
这使得由城市变量引用的对象,在pageScope 中以“城市”的名称可用。
<select name="Cities">
<c:forEach var="city" items ="${cities}">
<option> ${city}</option>
</c:forEach>
</select>
现在可以访问城市变量。
不能将 scriptlet 作为 EL 表达式的属性。
<select name="Cities">
<%for(int i = 0; i < cities.size(); i++) {%>
<option>${cities[<%=i%>]}</option>
<%}%>
</select>
如果考试类符合 bean 约定,您也可以使用标准操作:
<jsp:useBean id="exam" class="com.example.Exam" scope="pageScope"/>
The value return by the method called harfTo: <jsp:getProperty name="exam" property="harfTo"/>
不要忘记导入 JSTL 标签库:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix ="c" %>
编辑:
如果您有一个集合 exams 包含 exam 对象,那么您可以使用 JSTL 像这样遍历集合:
<c:forEach var="exam" items ="${exams}">
${exam.harfTo}
</c:forEach>