Jsp 如何访问EL表达式语言${}中的对象

Jsp 如何访问EL表达式语言${}中的对象,jsp,jstl,el,Jsp,Jstl,El,如果我有 ArrayList<Person> persons arraylistpersons 如何在EL中访问它 <c:foreach items="${what goes here??}" var="person">${person.title}</c:foreach> ${person.title} ${item.title} 名称应该位于视图可用的set as属性中如果您使用servlet或操作类创建列表,然后将其转发到JSP,那么您的serv

如果我有

ArrayList<Person> persons
arraylistpersons
如何在EL中访问它

<c:foreach items="${what goes here??}" var="person">${person.title}</c:foreach>
${person.title}
${item.title}

名称
应该位于视图可用的set as属性中

如果您使用servlet或操作类创建列表,然后将其转发到JSP,那么您的servlet或操作类中必须有以下行

ArrayList<Person> names = "get from somewhere";

request.setAttribute("personNames",names);  

<c:foreach var="item" items="${personNames}"> ${item.title} </c:foreach>
arraylistnames=“从某处获取”;
setAttribute(“personNames”,name);
${item.title}

表达式
${foo}
使用后台,通过
getAttribute(“foo”)
方法按此顺序搜索属性,其中
foo
from
${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);
当您将其放在会话范围中时,上述内容也同样有效

request.getSession().setAttribute("persons", persons);
甚至在适用范围内

getServletContext().setAttribute("persons", persons);
EL将在
${person.title}
中为
title
隐式查找一个公共实例(非静态!)方法,该方法在
person
类中前缀为
get
,如下所示:

public String getTitle() {
    return title;
}
类中不一定存在字段
title
(因此您甚至可以返回硬编码字符串并继续使用
${person.title}
),而且它不一定是实例字段(因此它也可以是静态字段,只要getter方法本身不是静态的)

只有
boolean
(不是
boolean
!)getter有特殊的处理;EL将隐式查找前缀为
is
的公共方法。例如,对于
${person.awesome}

public boolean isAwesome() {
    return awesome;
}
另见:

当你说“设置”时,你指的是什么?你可以用多种方式设置它。但该页面应该可用。请注意,语法是错误的。您似乎是从Ashish复制粘贴的。@BalusC同意语法。你有没有查过关于复制东西的时间记录:)对不起,我没想到你是第一个犯错误的人:)(不过还是不正确)谢谢你的精彩解释。如果我把这个放在会话中,会有什么不同吗?@robertlewis2001你必须从会话范围而不是请求范围中获取列表。它应该变成items=“{sessionScope.personNames}”。请注意语法错误。至于最后一条评论,没有必要明确提及范围。谢谢你,特别是幕后信息,因为这确实帮助了我。
public String getTitle() {
    return title;
}
public boolean isAwesome() {
    return awesome;
}