一:result标签的type属性
1 result标签里面除了name属性之外,还有一个属性 type属性
(1)type属性:如何到路径里面(转发还是重定向)
2 type属性值
(1)默认值,做转发操作,值是 dispatcher
(2)上面两个值dispatcher、redirect,这两个值一般针对到页面中配置,配置到其他的action里面
- chain:转发到action,一般不用,缓存问题
- redirectAction:重定向到action
Action获取表单提交数据:
其中BookAction实例:
1 使用模型驱动封装表单提交的数据 2 使用ActionContext或者ServletRequest获取数据
package com.hr.action;
import java.util.Arrays;
import java.util.Map;
import java.util.Set;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.ServletActionContext;
import com.hr.entity.User;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
public class BookAction extends ActionSupport implements ModelDriven<User> {
private User user;
public void setUser(User user) {
this.user = user;
}
//使用模型驱动封装表单提交的数据
public String demo1() {
System.out.println(user);
return NONE;
}
@Override
public User getModel() {
user = new User(); //在这里实例化或者在外面实例化
return user;
}
//使用ActionContext或者ServletActionContext获取数据
//Action获取提交的表单数据
public String demo2() {
//第一种方法: 得到Request对象
// HttpServletRequest request = ServletActionContext.getRequest();
// String username = request.getParameter("username");
// String password = request.getParameter("password");
// String address = request.getParameter("address");
// User user = new User();
// user.setUsername(username);
// user.setPassword(password);
// user.setAddress(address);
// System.out.println(user);
//第二种方法,得到ActionContext对象
ActionContext actionContext = ActionContext.getContext();
//map中key是name的值,value是输入的值
Map<String, Object> map = actionContext.getParameters();
//遍历
Set<String> set = map.keySet();
for(String s:set) {
//得到的是数组,因为会有复选框的情况
Object[] objArray = (Object[]) map.get(s);
System.out.println(s + "---------" + Arrays.toString(objArray));
}
return NONE;
}
}
其中,提交的jsp页面代码:
demo1.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}/book_demo1.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>
demo2.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}/book_demo2.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>
别忘了src下面的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="/">
<action name="book_*" class="com.hr.action.BookAction" method="{1}"></action>
</package>
<package name="demo2" extends="struts-default" namespace="/">
<action name="book2_*" class="com.hr.action.BookAction2" method="{1}">
<result></result>
</action>
</package>
</struts>
3 使用属性封装 4使用表达式封装
BookAction2.java
package com.hr.action;
import java.util.Arrays;
import java.util.Map;
import java.util.Set;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.ServletActionContext;
import com.hr.entity.User;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
public class BookAction2 extends ActionSupport {
//1 属性封装:定义属性
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;
}
/**
* 使用属性封装得到表单提交的数据
* 要求:会用
* @return
*/
public String demo3() {
System.out.println("属性封装" + username);
System.out.println("属性封装" + password);
System.out.println("属性封装" + address);
return NONE;
}
//1 表达式封装:声明实体类
private User user;
//2 表达式封装:生成实体类的set和get方法
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
//3表达式封装:在表单输入项的name属性值里面写表达式形式
/**
* 使用表达式封装
* 使用表达式封装可以把表单数据封装到实体类里面去
* 要求:会用
* @return
*/
public String demo4() {
System.out.println(user);
return NONE;
}
}
demo3.jsp和demo4.jsp同上面