为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用EL表达式语言$ {}访问对象

如何使用EL表达式语言$ {}访问对象

胡子哥哥 2019-11-02 14:37:05
如果我有一个ArrayList<Person> persons如何在EL中访问它?<c:foreach items="${what goes here??}" var="person">${person.title}</c:foreach>
查看完整描述

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;

}


查看完整回答
反对 回复 2019-11-02
?
慕森卡

TA贡献1806条经验 获得超8个赞

<c:forEach var="item" items="${names}"> ${item.title}  </c:forEach>

names 应该在set as属性中可用于视图



查看完整回答
反对 回复 2019-11-02
?
红糖糍粑

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>


查看完整回答
反对 回复 2019-11-02
  • 3 回答
  • 0 关注
  • 663 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信