EL表达式获取值栈数据

时间:2021-08-13 11:07:48

---------------------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;

}

public void setUsername(String username) {

this.username = username;

}

public String getPassword() {

return password;

}

public void setPassword(String password) {

this.password = password;

}

public String getAddress() {

return address;

}

public void 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:

<?xml version="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>

<package name="demo" extends="struts-default" namespace="/">

<action name="list" class="com.siwuxie095.action.ListAction">

<result name="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>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>List</title>

</head>

<body>

<!-- 使用 JSTL 标签 + EL 表达式获取值栈中 List 集合的数据 -->

<c:forEach items="${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】