3 回答
TA贡献1828条经验 获得超4个赞
表达${foo}在后台使用JspContext#findAttribute()其搜索在属性PageContext,HttpServletRequest,HttpSession并ServletContext以该顺序可以通过getAttribute("foo")方法,由此foo从${foo}由此表示属性名"foo",并返回第一个非空对象。
因此,如果您在Servlet中执行
ArrayList<Person> persons = getItSomehow();
request.setAttribute("persons", persons); // It's now available by ${persons}
request.getRequestDispatcher("/WEB-INF/persons.jsp").forward(request, response);
并通过URL调用此servlet,然后就可以page.jsp按照以下步骤对其进行迭代:
<c:foreach items="${persons}" var="person">
${person.title}
<c:forEach>
当您将其放在会话范围中时,上述内容同样有效
request.getSession().setAttribute("persons", persons);
甚至在应用范围内
getServletContext().setAttribute("persons", persons);
EL将用于title在${person.title}暗中寻找一个公共实例(不是静态的!)前缀方法get在Person类象下面这样:
public String getTitle() {
return title;
}
该字段title不一定需要存在于类中(因此您甚至可以返回一个硬编码的字符串并继续使用${person.title}),并且它不一定必须是实例字段(因此也可以是一个静态字段,只要getter方法本身不是静态的)。
只有boolean(不是Boolean!)吸气剂有特殊待遇。EL将隐式地寻找以开头的公共方法is。例如${person.awesome}:
public boolean isAwesome() {
return awesome;
}
TA贡献1806条经验 获得超8个赞
<c:forEach var="item" items="${names}"> ${item.title} </c:forEach>
names 应该在set as属性中可用于视图
TA贡献1815条经验 获得超6个赞
如果使用Servlet或操作类创建列表,然后将其转发到JSP,则Servlet或操作类中必须包含以下行。
ArrayList<Person> names = "get from somewhere";
request.setAttribute("personNames",names);
<c:foreach var="item" items="${personNames}"> ${item.title} </c:foreach>
添加回答
举报