如果我有
ArrayList<Person> persons
Run Code Online (Sandbox Code Playgroud)
我如何在EL中访问它?
<c:foreach items="${what goes here??}" var="person">${person.title}</c:foreach>
Run Code Online (Sandbox Code Playgroud)
Bal*_*usC 16
表达${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);
Run Code Online (Sandbox Code Playgroud)
并通过URL调用此servlet,然后您将能够page.jsp按如下方式迭代它:
<c:foreach items="${persons}" var="person">
${person.title}
<c:forEach>
Run Code Online (Sandbox Code Playgroud)
当您将其放入会话范围时,上述内容同样有效
request.getSession().setAttribute("persons", persons);
Run Code Online (Sandbox Code Playgroud)
甚至在应用范围内
getServletContext().setAttribute("persons", persons);
Run Code Online (Sandbox Code Playgroud)
EL将用于title在${person.title}暗中寻找一个公共实例(不是静态的!)前缀方法get在Person类象下面这样:
public String getTitle() {
return title;
}
Run Code Online (Sandbox Code Playgroud)
该字段title不一定需要存在于类中(因此您甚至可以返回硬编码字符串并继续使用${person.title}),并且它不一定需要是实例字段(因此它也可以是静态字段,只要getter方法本身不是静态的).
只有boolean(不Boolean!)吸气剂有特殊待遇; EL将隐式查找前缀为的公共方法is.例如${person.awesome}:
public boolean isAwesome() {
return awesome;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12516 次 |
| 最近记录: |