---------------------siwuxie095
EL 表达式获取值栈数据
1、导入JSTL 相关包,下载链接:
(1)http://tomcat.apache.org/taglibs/standard/
(2)http://archive.apache.org/dist/jakarta/taglibs/standard/binaries/
2、使用JSTL 标签 + EL 表达式 获取值栈数据
3、具体实现
(1)编写实体类
User.java:
package com.siwuxie095.entity;
// User 实体类 public class User {
private String username; private String password; private String address;
public String getUsername() { return username; } publicvoid setUsername(String username) { this.username = username; }
public String getPassword() { return password; } publicvoid setPassword(String password) { this.password = password; }
public String getAddress() { return address; } publicvoid setAddress(String address) { this.address = address; }
@Override public String toString() { return"User [username=" + username + ", password=" + password + ", address=" + address + "]"; }
} |
(2)编写Action
ListAction.java:
package com.siwuxie095.action;
import java.util.ArrayList; import java.util.List;
import com.opensymphony.xwork2.ActionSupport; import com.siwuxie095.entity.User;
public class ListAction extends ActionSupport {
/* * (1) 在 Action 中定义 List 集合对象 * * 因为总归是要 new 的,所以就在这里创 * 建,而不是声明了 */ private List<User> list=new ArrayList<User>();
/* * (2) 提供 List 集合对象的 get 方法即可 */ public List<User> getList() { return list; }
@Override public String execute() throws Exception {
/* * 如果上面仅仅是声明了List 集合对象, * 那么就要在这里创建,即 new 出来 */
/* * (3) 在执行的方法中,向 List 集合对象中设置值 */ User user1=new User(); user1.setUsername("小白"); user1.setPassword("8888"); user1.setAddress("中国");
User user2=new User(); user2.setUsername("小黑"); user2.setPassword("4444"); user2.setAddress("美国");
list.add(user1); list.add(user2);
return SUCCESS; }
} |
(3)配置Action
struts.xml:
<?xmlversion="1.0"encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<packagename="demo"extends="struts-default"namespace="/">
<actionname="list"class="com.siwuxie095.action.ListAction"> <resultname="success">/list.jsp</result> </action>
</package>
</struts> |
(4)编写页面
list.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!-- 引入 JSTL 标签库 --> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <metahttp-equiv="Content-Type"content="text/html; charset=UTF-8"> <title>List</title> </head> <body>
<!-- 使用 JSTL 标签 + EL 表达式获取值栈中 List 集合的数据 --> <c:forEachitems="${list }"var="user"> ${user.username } ${user.password } ${user.address } <br/> </c:forEach>
</body> </html> |
(5)访问路径
http://localhost:8080/工程名/list.action
为什么EL 表达式能获取值栈数据
1、EL 表达式本身是用于获取域对象中的值
2、域对象中值的存取
(1)向域对象中放值使用setAttribute() 方法
(2)从域对象中获取值使用 getAttribute() 方法
3、Struts2 底层增强了Request 对象的 getAttribute() 方法
该增强是在Struts2 核心过滤器的 doFilter() 方法中做的,在
其中调用wrapRequest()方法
4、从Request 域中获取值
(1)如果能获取到,直接返回
(2)如果获取不到,会到值栈中把值获取出来,放到域对象中
5、查看源代码
(1)
(2)
(3)
(4)
6、不建议使用EL 表达式获取值栈数据(性能低下)
【made by siwuxie095】