二、struts2结果页面配置,获取表单数据,数据封装
二、struts2结果页面配置,获取表单数据,数据封装
swift_hua 发表于6个月前
二、struts2结果页面配置,获取表单数据,数据封装
  • 发表于 6个月前
  • 阅读 0
  • 收藏 0
  • 点赞 0
  • 评论 0

标题:腾讯云 新注册用户域名抢购1元起>>>   

结果页面配置
全局结果页面
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只是一个显示界面,不写出了

标签: struts2
共有 人打赏支持
粉丝 0
博文 33
码字总数 20868
×
swift_hua
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: