结果页面配置

  1. 全局结果页面(01
  2. 局部结果页面(01
  3. type属性值
    1)当在结果中需要访问另一个Action的时候,type属性值建议设置为重定向(redirectAction),转发(chain)不推荐使用,存在缓存问题。

获取表单数据

案例:jsp页面

  <body>
    <form action="${pageContext.request.contextPath }/servletActionContextDemo1.action" method="post">
    	username:<input type="text" name="username" /><br>
    	password:<input type="text" name="password" /><br>
    	<input type="submit" value="提交"/>    	
    </form>
  </body>
  1. ActionContext
package tqb.getformdata;

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

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

/** * 获取表单数据的第一种方式 * @author tqb * */
public class ActionContextDemo1 extends ActionSupport {
	@Override
	public String execute() throws Exception {
		
		ActionContext context = ActionContext.getContext();
		Map<String, Object> map = context.getParameters();
		Set<String> keySet = map.keySet();
		for (String string : keySet) {
			/* * 实质返回的就是Object数组 */
			Object[] object = (Object[]) map.get(string);
			System.out.println(string + ":" + Arrays.toString(object));
		}
		return SUCCESS;
	}
}
  1. ServletActionContext(常用)
package tqb.getformdata;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;

/** * 获取表单数据第二种方式ServletActionContext * @author tqb * */
public class ServletActionContextDemo1 extends ActionSupport {
	@Override
	public String execute() throws Exception {
		
		HttpServletRequest request = ServletActionContext.getRequest();
		String username = request.getParameter("username");
		String password = request.getParameter("password");
		
		System.out.println(username + ":" + password);
		
		return SUCCESS;
	}
}

在Action中操作域对象

package tqb.getformdata;

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

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;

/** * 在action中操作域对象 * @author tqb * */
public class OperateFieldDemo extends ActionSupport {
	@Override
	public String execute() throws Exception {
		
		//操作request
		HttpServletRequest request = ServletActionContext.getRequest();
		request.setAttribute("req", "reqValue");
		
		//操作session
		HttpSession session = request.getSession();
		session.setAttribute("session", "sessionValue");
		
		//操作ServletConText
		ServletContext context = ServletActionContext.getServletContext();
		context.setAttribute("context", "contextValue");
		return SUCCESS;
	}
}

封装表单数据

示例:User类

package tqb.entity;

public class User {
	private String username;
	private String password;

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

	@Override
	public String toString() {
		return "User [username=" + username + ", password=" + password + "]";
	}

}

  1. 原始封装方法
package tqb.packaging;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;

import tqb.entity.User;

/** * 原始数据的封装方式 * @author tqb * */
public class OldPackagingDemo extends ActionSupport {
	@Override
	public String execute() throws Exception {
		HttpServletRequest request = ServletActionContext.getRequest();
		String username = request.getParameter("username");
		String password = request.getParameter("password");
		
		User user = new User();
		user.setUsername(username);
		user.setPassword(password);
		
		System.out.println(user);
		
		return SUCCESS;
	}
}
  1. 属性封***r> 1)设置全局变量(和表单数据name名称要相同)
    2)生成set和get方法
package tqb.packaging;

import com.opensymphony.xwork2.ActionSupport;

/** * 封装数据的方式1——属性封装 * @author tqb * */
public class Demo1 extends ActionSupport {
	//1.设置全局变量(和表单中的名称要相同)
	private	String username;
	private String password;
	
	//2.生成get set方法
	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;
	}
	
	@Override
	public String execute() throws Exception {
		System.out.println(username + ":" + password);
		return SUCCESS;
	}

}

  1. 模型驱动封装(常用)
    1)实现ModelDriven<User>接口及getModel()方法
    2)创建实体类对象
package tqb.packaging;

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

import tqb.entity.User;

/** * 封装表单数据第二种方法 * 模型驱动封装(常用方式) * @author tqb * */
public class Demo2 extends ActionSupport implements ModelDriven<User> {
	
	//创建实体类对象
	User user = new User();
	//实现getModel方法
	@Override
	public User getModel() {
		//返回实体类对象
		return user;
	}
	
	@Override
	public String execute() throws Exception {
		System.out.println(user);
		return SUCCESS;
	}

}
  1. 表达式封***r> 1)声明实体类
    2)实现set和get方法
    3)在表单中name属性值必须是这种格式:user.username、user.password
package tqb.packaging;

import com.opensymphony.xwork2.ActionSupport;
import tqb.entity.User;

/** * 封装表单数据的第三种方式:表达式封装 * 在表单中name属性值必须是这种格式:user.username、user.password * @author tqb * */
public class Demo3 extends ActionSupport {
	//声明实体类
	private User user;
	
	//实现get set方法
	public User getUser() {
		return user;
	}
	
	public void setUser(User user) {
		this.user = user;
	}

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

表达式封装和模型驱动封装的比较

  1. 表达式封装在jsp页面需要使用独有的表达式格式,而模型驱动封装不需要
  2. 表达式封装能封装多个实体类,而模型驱动封装只能封装一个实体类

封装数据到List和Map集合

  1. 封装到List集合

  2. 封装到Map集合