非本人总结的笔记,抄点笔记复习复习。感谢传智博客和黑马程序猿
结果页面的设置
在action标签里面有一个result标签
在result标签里面有属性name属性:根据action方法的返回值,配置到路径中
在result标签里面还有一个type属性:配置如何到路径中(重定向和转发...)
type属性值
dispatcher:转发操作到jsp页面中(默认值)
redirect:重定向操作到jsp页面中
chain:转发到action中
redirectAction重定向到action中
演示效果
在action中向request域设置值,分别设置result和type属性实现转发和重定向,到页面中获取request中的值。
如果转发,值可以获取到,访问路径不变
如果重定向,值不能获取到,访问路径改变
创建action,TypeAction
package cn.itcast.type.action;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
/**
* 演示result标签的type配置
* @author asus
*
*/
public class TypeAction extends ActionSupport {
@Override
public String execute() throws Exception {
//向request域设置值
HttpServletRequest request = ServletActionContext.getRequest();
request.setAttribute("req", "requestValuetype");
return SUCCESS;
}
}
配置action,struts.xml
/type/type.jsp
创建结果页面,type.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
My JSP 'type.jsp' starting page
request域值: ${requestScope.req }
局部结果页面和全局结果页面
比如:现在有两个action,这两个action都放回success,这两个success都是同一个结果页面 以前的做法,每个action都配置success页面
**配置全局结果页面,在所有的action如果返回success,而且都到同一个页面
在package里面使用标签
局部结果页面,在action里面使用result标签配置
如果既配置了全局结果页面,又配合了局部结果页面,最终以局部结果页面为准
Struts2封装数据的方式(获取表单数据)
前提:创建User类set和get方法,生成toString方法
package cn.itcast.bean;
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)传统方式获取表单数据
Javabean:就是Java类,遵循一定的书写规范
第一步 创建DateAction1
package cn.itcast.bean;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
/**
* 使用传统方式获取表单数据,封装到javabean中
* @author asus
*
*/
public class DataAction1 extends ActionSupport {
@Override
public String execute() throws Exception {
//使用servletactionContext获取
HttpServletRequest request = ServletActionContext.getRequest();
//获取表单数据
String username = request.getParameter("username");
String password = request.getParameter("password");
//封装到javabean中
User user = new User();
user.setUsername(username);
user.setPassword(password);
System.out.println(user);
return SUCCESS;
}
}
第二步 配置action,struts.xml
/index.jsp
第三步 创建form1页面
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
My JSP 'form1.jsp' starting page
(2)第一种:属性封装(在action中创建User类,不适合很多属性表单)
第一步 创建FieldAction
package cn.itcast.bean;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
/**
* 使用属性封装数据
* @author asus
*
*/
public class FieldAction extends ActionSupport {
//第一步.在action里面声明变量
//(变量名称和表单输入项的name属性值一样)
private String username;
private String password;
//第二步.生成变量的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;
}
@Override
public String execute() throws Exception {
System.out.println(username);
System.out.println(password);
return SUCCESS;
}
}
第二步 配置action struts.xml
/index.jsp
第三步 创建Form1页面
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
My JSP 'form1.jsp' starting page
(3)第二种:ognl表达式封装(直接把表单数据封装到Javabean里面)
第一步 创建OgnlAction
package cn.itcast.bean;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
/**
* 使用ognl表达式封装数据
* @author asus
*
*/
public class OgnlAction extends ActionSupport {
//1.声明javabean
private User user;
//2.生成javabean的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);
return SUCCESS;
}
}
第二步 配置action struts.xml
/index.jsp
第三步 创建form2页面
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
My JSP 'form1.jsp' starting page
第三种:模型驱动封装(用的最多)创建Javabean对象
第一步 创建ModelAction 实现ModelDriven接口
package cn.itcast.bean;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
/**
* 使用模型驱动方式封装数据
* @author asus
*
*/
//接口里面使用泛型,写要封装到哪个javabean的名称
public class ModelAction extends ActionSupport implements ModelDriven{
//创建javabean对象
private User user = new User();
//实现接口的方法
//getModel方法里面return的值,创建的javabean对象
public User getModel() {
return user;
}
@Override
public String execute() throws Exception {
System.out.println(user);
return SUCCESS;
}
}
第二步 配置action struts.xml
/index.jsp
第三步 创建form3页面
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
My JSP 'form1.jsp' starting page
底层:模型驱动使用Struts2里面默认执行的拦截器
知识点:发送请求的时候,首先到过滤器里面,默认执行一系列拦截器,拦截器在struts-default.xml中配置
比较OGNL封装和模型驱动封装
共同点:都可以把数据封装到Javabean里面
不同点:
1、使用模型驱动只能向一个Javabean里面封装数据
2、使用OGNL表达式形式可以向多个Javabean里面封装数据,声明不同的Javabean
第一步:创建两个Javabean类
User类
package cn.itcast.bean;
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 + "]";
}
}
Person类
package cn.itcast.bean;
public class Person {
private String address;
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
第二步:创建OgnlAction类
package cn.itcast.bean;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
/**
* 使用ognl表达式封装多个数据
* @author asus
*
*/
public class OgnlAction extends ActionSupport {
//声明两个javabean
private User user;
private Person person;
//生成javabean的set和get方法
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public Person getPerson() {
return person;
}
public void setPerson(Person person) {
this.person = person;
}
@Override
public String execute() throws Exception {
System.out.println(user);
System.out.println(person.getAddress());
return SUCCESS;
}
}
第三步:配置action,struts.xml
/index.jsp
第四步:配置form页面
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
My JSP 'form1.jsp' starting page
Struts2封装复杂数据(会用)
(1)封装数据到List集合
第一步 声明list集合
第二步 生成list集合的get和set方法
//声明list集合
private List list;
public List getList(){
return list;
}
public void setList(List list) {
this.list = list;
}
第三步 在表单页面中使用ognl表达式
username: