EL表达式获取值栈数据

时间:2022-11-25 18:59:43

---------------------siwuxie095

  

  

  

  

  

  

  

  

EL 表达式获取值栈数据

  

  

1、导入JSTL 相关包,下载链接:

  

1http://tomcat.apache.org/taglibs/standard/

  

2http://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

  

EL表达式获取值栈数据

  

  

2

  

EL表达式获取值栈数据

  

  

3

  

EL表达式获取值栈数据

  

  

4

  

EL表达式获取值栈数据

  

EL表达式获取值栈数据

  

  

  

6、不建议使用EL 表达式获取值栈数据(性能低下)

  

  

  

  

  

  

  

  

【made by siwuxie095】