结果页面配置
- 全局结果页面(01)
- 局部结果页面(01)
- 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>
- 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;
}
}
- 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 + "]";
}
}
- 原始封装方法
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;
}
}
- 属性封***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)实现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;
}
}
- 表达式封***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;
}
}
表达式封装和模型驱动封装的比较
- 表达式封装在jsp页面需要使用独有的表达式格式,而模型驱动封装不需要
- 表达式封装能封装多个实体类,而模型驱动封装只能封装一个实体类
封装数据到List和Map集合
- 封装到List集合
- 封装到Map集合