gpt4 book ai didi

jsp - 如何在 EL 表达式语言 ${} 中访问对象

转载 作者:行者123 更新时间:2023-12-04 10:02:08 25 4
gpt4 key购买 nike

如果我有一个

ArrayList<Person> persons

如何在 EL 中访问它?
<c:foreach items="${what goes here??}" var="person">${person.title}</c:foreach>

最佳答案

表达式 ${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>

当您将其放在 session 范围内时,上述内容也同样有效
request.getSession().setAttribute("persons", persons);

甚至在应用范围内
getServletContext().setAttribute("persons", persons);

EL将为 title${person.title}隐式查找以 get 为前缀的公共(public)实例(不是静态的!)方法在 Person类如下:
public String getTitle() {
return title;
}

字段 title不一定需要存在于类中(所以你甚至可以返回一个硬编码的字符串并继续使用 ${person.title} ),也不一定需要是实例字段(所以它也可以是静态字段,只要getter 方法本身不是静态的)。

仅限 boolean (不是 Boolean !) setter/getter 有特殊处理; EL 将隐式查找以 is 为前缀的公共(public)方法.例如。对于 ${person.awesome} :
public boolean isAwesome() {
return awesome;
}

也可以看看:
  • Our EL wiki page
  • How do servlets work? Instantiation, sessions, shared variables and multithreading
  • How to avoid Java code in JSP files?
  • Show JDBC ResultSet in HTML in JSP page using MVC and DAO pattern
  • Use EL ${XY} directly in scriptlet <% XY %>
  • How does Java expression language resolve boolean attributes? (in JSF 1.2)
  • 关于jsp - 如何在 EL 表达式语言 ${} 中访问对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5387174/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com