文档章节

二、struts2结果页面配置,获取表单数据,数据封装

swift_hua
 swift_hua
发布于 2017/07/23 23:18
字数 3075
阅读 4
收藏 0

结果页面配置
全局结果页面
1 result标签配置action方法的返回值到不同的路径里面

2 创建两个action,执行默认的方法execute方法,让两个action的方法都返回success,返回success之后,配置到同一个页面里面
(1)如果多个action,方法里面返回值相同的,到页面也是相同的,这个时候可以使用全局结果页面配置
 
(2)在package标签里面配置
 
局部结果页面
 
(1)配置全局页面,也配置了局部页面,最终以局部配置为准

 

Result标签的type属性
1 result标签里面除了name属性之外,还有一个属性 type属性
(1)type属性:如何到路径里面(转发还是重定向)

2 type属性值
(1)默认值,做转发操作,值是 dispatcher
 

(2)做重定向操作,值是 redirect
 

(2)上面两个值dispatcher、redirect,这两个值一般针对到页面中配置,
配置到其他的action里面
- chain:转发到action,一般不用,缓存问题
 
- redirectAction:重定向到action

Action获取表单提交数据
1 之前web阶段,提交表单到servlet里面,在servlet里面使用request对象里面的方法获取,getParameter,getParameterMap

2 提交表单到action,但是action没有request对象,不能直接使用request对象

3 action获取表单提交数据主要三种方式
(1)使用ActionContext类
(2)使用ServletActionContext类
(3)使用接口注入方式

使用ActionContext类获取
 
(1)因为方法不是静态的方法,需要创建ActionContext类的对象
(2)这个ActionContext类对象不是new出来的,

1 具体演示
(1)创建表单,提交表单到action里面
(2)在action使用ActionContext获取数据

使用ServletActionContext类获取
 
(1)调用类里面静态方法,得到request对象

使用接口注入(了解)
1 让action实现接口,为了得到request对象

 

在action操作域对象
1 request、session、servletContext域对象

2 使用ServletActionContext类操作

 

Struts2封装获取表单数据方式
原始方式获取表单封装到实体类对象

属性封装(会用)
1 直接把表单提交属性封装到action的属性里面

2 实现步骤
(1)在action成员变量位置定义变量
- 变量名称和表单输入项的name属性值一样
(2)生成变量的set方法(把set和get方法都写出来)

3 使用属性封装获取表单数据到属性里面,不能把数据直接封装到实体类对象里面

模型驱动封装(重点)
1 使用模型驱动方式,可以直接把表单数据封装到实体类对象里面

2 实现步骤
(1)action实现接口 ModelDriven
 
(2)实现接口里面的方法 getModel方法
- 把创建对象返回

(3)在action里面创建实体类对象
 
//前提要求:表单输入项name属性值与实体类属性名称一样

3 使用模型驱动和属性封装注意问题:
(1)在一个action中,获取表单数据可以属性封装,使用模型驱动封装,
不能同时使用属性封装和模型驱动封装获取同一个表单数据
如果同时使用,之后执行模型驱动

表达式封装(会用)
1 实现过程
(1)使用表达式封装可以把表单数据封装到实体类对象里面

第一步 在action里面声明实体类
第二步 生成实体类变量的set和get方法
 
第三步 在表单输入项的name属性值里面写表达式形式
 
2 把表达式封装归类到属性封装里面

比较表达式封装和模型驱动封装
1 使用表达式封装和模型驱动封装都可以把数据封装到实体类对象里面

2 不同点:
(1)使用模型驱动只能把数据封装到一个实体类对象里面
- 在一个action里面不能使用模型驱动把数据封装到不同的实体类对象里面

(2)使用表达式封装可以把数据封装到不同的实体类对象里面
 


 
封装到集合里面
封装数据到List集合
第一步 在action声明List
第二步 生成list变量的set和get方法
 
第三步 在表单输入项里面写表达式

封装数据到Map集合
第一步 声明map集合
第二步 生成get和set方法
 
第三步 在表单输入项的name属性值里面写表达式

 

案例-添加客户功能
1 模型驱动获取表单数据
 
2 在hibernate实现
 
3 添加之后到列表页面中,让列表的action执行一次

 

附录源码:

BookAction.java

package cn.itcast.action;

import com.opensymphony.xwork2.ActionSupport;

public class BookAction extends ActionSupport {

	@Override
	public String execute() throws Exception {
		return "success";
	}
}

OrdersAction.java

package cn.itcast.action;

import com.opensymphony.xwork2.ActionSupport;

public class OrdersAction extends ActionSupport {

	@Override
	public String execute() throws Exception {
		return "success";
	}
}

DataDemo1Action.java

package cn.itcast.data;

import com.opensymphony.xwork2.ActionSupport;
/**
 * 
* @ClassName: DataDemo1Action 
* @Description: 使用属性封装获取表单数据
* @author swift_hua@126.com
* @date 2017年7月23日 下午11:10:11
 */
public class DataDemo1Action extends ActionSupport {

	//1 定义变量
	//变量的名称和表单输入项name属性值一样
	private String username;
	private String password;
	private String address;
	
	//2 生成变量的set和get方法
	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 execute() throws Exception {
		System.out.println(username+":"+password+":"+address);
		return NONE;
	}


}


DataDemo2Action.java

package cn.itcast.data;

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;

import cn.itcast.entity.User;
/**
 * 使用模型驱动获取表单数据
 * @author asus
 *
 */
public class DataDemo2Action extends ActionSupport implements ModelDriven<User>{

	//创建对象
	//前提要求: 表单输入项name属性值 和 实体类属性名称一样
	private User user = new User();
	public User getModel() {
		//返回创建user对象
		return 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 execute() throws Exception {
		
		System.out.println(user);
		return NONE;
	}




}


DataDemo3Action.java

package cn.itcast.data;

import com.opensymphony.xwork2.ActionSupport;

import cn.itcast.entity.Book;
import cn.itcast.entity.User;
/**
 * 使用表达式封装数据到实体类对象
 * @author asus
 *
 */
public class DataDemo3Action extends ActionSupport {

	//1 声明实体类
	private User user;
	
	private Book book;
	
	public Book getBook() {
		return book;
	}
	public void setBook(Book book) {
		this.book = book;
	}
	//2 生成实体类变量的set和get方法
	public User getUser() {
		return user;
	}
	public void setUser(User user) {
		this.user = user;
	}

	@Override
	public String execute() throws Exception {
		System.out.println(user);
		System.out.println(book.getBname());
		return NONE;
	}






}


ListAction.java

package cn.itcast.data;

import java.util.List;

import com.opensymphony.xwork2.ActionSupport;

import cn.itcast.entity.User;
/**
 * 封装数据到list集合
 * @author asus
 *
 */
public class ListAction extends ActionSupport {

	// 1 声明List变量
	private List<User> list;
	// 2 生成get和set方法
	public List<User> getList() {
		return list;
	}
	public void setList(List<User> list) {
		this.list = list;
	}

	@Override
	public String execute() throws Exception {
		System.out.println(list);
		return NONE;
	}


}


MapAction.java

package cn.itcast.data;

import java.util.Map;

import com.opensymphony.xwork2.ActionSupport;

import cn.itcast.entity.User;
/**
 * 封装数据到map集合
 * @author asus
 *
 */
public class MapAction extends ActionSupport {

	// 1 声明map集合
	private Map<String,User> map;
	public Map<String, User> getMap() {
		return map;
	}
	public void setMap(Map<String, User> map) {
		this.map = map;
	}


	@Override
	public String execute() throws Exception {
		System.out.println(map);
		return NONE;
	}


}

Book.java

package cn.itcast.entity;

public class Book {

	private String bname;

	public String getBname() {
		return bname;
	}

	public void setBname(String bname) {
		this.bname = bname;
	}
	
}


User.java

package cn.itcast.entity;

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 + "]";
	}
	
}

Form1DemoAction.java

package cn.itcast.form;

import java.util.Map;
import java.util.Set;

import org.apache.catalina.tribes.util.Arrays;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class Form1DemoAction extends ActionSupport {

	public String execute() throws Exception {
		//第一种方式 使用ActionContext类获取
		//1 获取ActionContext对象
		ActionContext context = ActionContext.getContext();
		//2 调用方法得到表单数据
		// key是表单输入项name属性值,value是输入的值
		Map<String, Object> map = context.getParameters();
		
		Set<String> keys = map.keySet();
		for (String key : keys) {
			//根据key得到value
			//数组形式:因为输入项里面可能有复选框情况
			Object[] obj = (Object[]) map.get(key);
			System.out.println(Arrays.toString(obj));
		}
		
		return NONE;
	}
}


Form2DemoAction.java

package cn.itcast.form;

import java.util.Map;
import java.util.Set;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.apache.catalina.tribes.util.Arrays;
import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class Form2DemoAction extends ActionSupport {

	public String execute() throws Exception {
		//第一种方式 使用ServletActionContext类获取
		//1 使用ServletActionContext获取request对象
//		HttpServletRequest request = ServletActionContext.getRequest();
//		//2 调用request里面的方法得到结果
//		String username = request.getParameter("username");
//		String password = request.getParameter("password");
//		String address = request.getParameter("address");
//		
//		System.out.println(username+":"+password+":"+address);
//		
		//操作三个域对象
		//1 request域
		HttpServletRequest request = ServletActionContext.getRequest();
		request.setAttribute("req", "reqValue");
		
		//2 session域
		HttpSession session = request.getSession();
		session.setAttribute("sess", "sessValue");
		
		//3 ServletContext域
		ServletContext context = ServletActionContext.getServletContext();
		context.setAttribute("contextname", "contextValue");
		
		return NONE;
	}
}





Form3DemoAction.java

package cn.itcast.form;

import java.util.Map;
import java.util.Set;

import javax.servlet.http.HttpServletRequest;

import org.apache.catalina.tribes.util.Arrays;
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.interceptor.ServletRequestAware;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
/**
 * 使用接口注入方式
 * @author asus
 *
 */
public class Form3DemoAction extends ActionSupport implements ServletRequestAware {

	private HttpServletRequest request ;
	@Override
	public void setServletRequest(HttpServletRequest request) {
		this.request = request;
	}
	
	public String execute() throws Exception {
		request.getParameter("");
		
		return NONE;
	}


}


Form4DemoAction.java

package cn.itcast.form;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;

import cn.itcast.entity.User;
/**
 * 使用ServletActionContext获取表单数据封装到实体类对象里面
 * @author asus
 *
 */
public class Form4DemoAction extends ActionSupport {

	public String execute() throws Exception {
		//1 获取表单数据
		HttpServletRequest request = ServletActionContext.getRequest();
		String username = request.getParameter("username");
		String password = request.getParameter("password");
		String address = request.getParameter("address");
		
		//2 封装到实体类对象里面
		User user = new User();
		user.setUsername(username);
		user.setPassword(password);
		user.setAddress(address);
		
		System.out.println(user);
		return NONE;
	}


}

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="demo1" extends="struts-default" namespace="/">
	
		<!-- 全局结果页面配置 -->
		<!-- <global-results>
			<result name="success">/hello.jsp</result>
		</global-results> -->
		
		<action name="book" class="cn.itcast.action.BookAction">
			<!-- action访问名称 -->
			<result name="success"  type="chain">orders</result>
		</action>
		<action name="orders" class="cn.itcast.action.OrdersAction">
			<result name="success">/hello.jsp</result>
		</action>
	</package>
	
	<!-- 获取表单提交数据 -->
	<package name="demo2" extends="struts-default" namespace="/">
		<action name="form1" class="cn.itcast.form.Form1DemoAction"></action>
		<action name="form2" class="cn.itcast.form.Form2DemoAction"></action>
		<action name="form4" class="cn.itcast.form.Form4DemoAction"></action>
		
		<action name="data1" class="cn.itcast.data.DataDemo1Action"></action>
		<action name="data2" class="cn.itcast.data.DataDemo2Action"></action>
		<action name="data3" class="cn.itcast.data.DataDemo3Action"></action>
		
		<action name="list" class="cn.itcast.data.ListAction"></action>
		<action name="map" class="cn.itcast.data.MapAction"></action>
	</package>
</struts>



web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>struts2_day01</display-name>
    <filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
</web-app>

data1.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!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>Insert title here</title>
</head>
<body>
	<form action="${pageContext.request.contextPath }/data1.action" method="post">
		username:<input type="text" name="username"/>
		<br/>
		password:<input type="text" name="password"/>
		<br/>
		address:<input type="text" name="address"/>
		<br/>
		<input type="submit" value="提交"/>
	</form>
</body>
</html>


data2.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!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>Insert title here</title>
</head>
<body>
	<form action="${pageContext.request.contextPath }/data2.action" method="post">
		username:<input type="text" name="username"/>
		<br/>
		password:<input type="text" name="password"/>
		<br/>
		address:<input type="text" name="address"/>
		<br/>
		<input type="submit" value="提交"/>
	</form>
</body>
</html>


data3.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!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>Insert title here</title>
</head>
<body>
	<form action="${pageContext.request.contextPath }/data3.action" method="post">
		username:<input type="text" name="user.username"/>
		<br/>
		password:<input type="text" name="user.password"/>
		<br/>
		address:<input type="text" name="user.address"/>
		<br/>
		bname: <input type="text" name="book.bname"/>
		<br/>
		<input type="submit" value="提交"/>
	</form>
</body>
</html>


form1.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!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>Insert title here</title>
</head>
<body>
	<form action="${pageContext.request.contextPath }/form4.action" method="post">
		username:<input type="text" name="username"/>
		<br/>
		password:<input type="text" name="password"/>
		<br/>
		address:<input type="text" name="address"/>
		<br/>
		<input type="submit" value="提交"/>
	</form>
</body>
</html>


list.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!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>Insert title here</title>
</head>
<body>
	<form action="${pageContext.request.contextPath }/list.action" method="post">
		<!-- list[0] : 表示list集合中第一个user对象 -->
		username:<input type="text" name="list[0].username"/>
		<br/>
		password:<input type="text" name="list[0].password"/>
		<br/>
		address:<input type="text" name="list[0].address"/>
		
		<br/><br/>
		
		username:<input type="text" name="list[1].username"/>
		<br/>
		password:<input type="text" name="list[1].password"/>
		<br/>
		address:<input type="text" name="list[1].address"/>
		<br/>
		<input type="submit" value="提交"/>
	</form>
</body>
</html>


map.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!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>Insert title here</title>
</head>
<body>
	<form action="${pageContext.request.contextPath }/map.action" method="post">
		<!-- 设置key值 map['key值']
			设置value值
		 -->
		username:<input type="text" name="map['one'].username"/>
		<br/>
		password:<input type="text" name="map['one'].password"/>
		<br/>
		address:<input type="text" name="map['one'].address"/>
		
		<br/><br/>
		
		username:<input type="text" name="map['abcd'].username"/>
		<br/>
		password:<input type="text" name="map['abcd'].password"/>
		<br/>
		address:<input type="text" name="map['abcd'].address"/>
		<br/>
		<input type="submit" value="提交"/>
	</form>
</body>
</html>


hello.jsp和world.jsp只是一个显示界面,不写出了

© 著作权归作者所有

共有 人打赏支持
上一篇: 三、struts值栈
下一篇: 一、struts入门
swift_hua
粉丝 0
博文 33
码字总数 20868
作品 0
成都
程序员
私信 提问
Struts2文件的上传和下载

文件上传的原理: 表单元素的enctype属性指定的是表单数据的编码方式,该属性有3个值: 1) application/x-www-form-urlencoded:这是默认编码方式,它只处理表单域里的value属性值,采用这种...

倚小丁
2010/11/01
0
3
Struts2学习整理

Struts2的相关配置文件 default.properties -- 在org/apache/struts2/目录下,代表的是配置的是Struts2的常量的值 struts-default.xml -- 在Struts2的核心包下,代表的是Struts2核心功能的配...

Lunqi
2015/09/10
6.1K
0
Struts2 文件上传 对XHR的请求 (ajax + formData 上传的文件) 拿不到文件

Struts2 对文件上传是通过 file upload 拦截器实现的,具体引入方法见这里。然而 File Upload 拦截器似乎对于 XHR 过来的文件上传请求无法响应。 MMP老子试了半天。 用ajax + formData 的方式...

小黄狗
10/01
0
0
Struts2核心技术 (二)

struts2中的参数封装 静态参数封装 什么是静态参数? 静态参数就是硬编码的,不可随意改变。 例子:

architect刘源源
04/24
0
0
ognl-值栈基本操作

一 OGNL概述 1 之前web阶段,学习过EL表达式,EL表达式在jsp中获取对象里面的值 2 OGNL是一种表达式,这个表达式功能更加强大 (1)在Struts2里面操作值栈数据 (2)一般在Struts2里操作ogn...

Bbigbug
2017/10/16
0
0

没有更多内容

加载失败,请刷新页面

加载更多

CentOS7.4 搭建 ss

一键安装 shadowsocks-go 版 wget –no-check-certificate https://raw.githubusercontent.com/teddysun/shadowsocks_install/master/shadowsocks-go.sh chmod +x shadowsocks-go.sh ./s......

YunOu
32分钟前
5
0
Spark Streaming整合kafka实战

kafka作为一个实时的分布式消息队列,实时的生产和消费消息,这里我们可以利用SparkStreaming实时计算框架实时地读取kafka中的数据然后进行计算。在spark1.3版本后,kafkaUtils里面提供了两个...

hblt-j
33分钟前
2
0
vue组件中的样式属性scoped实例

vue组件中的style标签标有scoped属性时表明style里的css样式只适用于当前组件元素 。接下来通过本文给大家分享vue组件中的样式属性scoped实例详解 **Scoped CSS** Scoped CSS规范是Web组件产...

前端攻城老湿
48分钟前
10
0
ios 面试部分整理

assign weak区别 assign不是有崩溃的风险么 strong和copy 对非容器类可变类型 非容器类不可变 容器类可变容器类不可变 进行深拷贝浅拷贝有什么区别 什么样的对象可以进行拷贝 就是这个NScod...

大魔王周晓辉
49分钟前
3
0
浅谈教你如何掌握Linux系统

linux能做什么?相信绝大数人都有这样的疑问。可以玩吃鸡吗?可以玩lol吗? 如果你是以娱乐的名义来评价linux的可用性,对不起,linux可能不适合你,因为linux是一个工具,他是教你聪明的,不...

Linux就该这么学
49分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部