今天内容
1. 结果页面配置
* 全局结果页面
* 局部结果页面
* result标签type属性
2. 在action获取表单提交数据
* 使用ActionContext类获取
* 使用ServletActionContext
* 使用接口注入方式获取
3. struts2提供获取表单数据方式
* 属性封装
* 模型驱动封装
4. struts2获取数据封装到集合中
* 封装到list集合
* 封装到map集合

 

1. 结果页面配置
* 全局结果页面:多个action的方法返回值相同,转发到的页面也相同,使用全局结果页面
<global-results>
  <result name="success">/index.jsp</result>
</global-results>
* 局部结果页面:action里面的result就是局部结果页面
* result标签type属性
> 默认值:dispatcher 转发
> 重定向:redirect
> 转发到action:chain(一般不用,有缓存问题)
> 重定向到action:redirectAction

2. 在action获取表单提交数据
* 使用ActionContext类获取
  /**
  * 使用ActionContext类获取
  */
  //获取ActionContext对象
  ActionContext ac = ActionContext.getContext();
  //调用方法得到表单数据 key是表单输入项name属性值,value是输入的值
  Map<String, Object> map = ac.getParameters();

  Set<String> keys = map.keySet();
  for (String key : keys) {
  Object[] obj = (Object[]) map.get(key);
  System.out.println(Arrays.toString(obj));
  }
* 使用ServletActionContext
  /**
  * 使用ServletActionContext类获取
  */
  HttpServletRequest request = ServletActionContext.getRequest();
  String username = request.getParameter("username");
  String password = request.getParameter("password");

  System.out.println(username+":"+password);
  return NONE;
* 使用接口注入方式获取
  实现ServletContextAware接口(一般不用)

3. struts2提供获取表单数据方式
* 属性封装:直接把表单提交的数据封装到action的属性里面(不能直接封装到实体类)
  1)在action成员变量位置定义与表单属性name值一样
  2)生成get set方法
* 模型驱动封装(重点)
  1)action实现接口 ModelDriven
  2)需要有实体类
  public class Form3Action extends ActionSupport implements ModelDriven<User>{
  User user = new User();
  @Override
  public User getModel() {
  return user;
  }
  public String execute(){
  System.out.println(user);
  return NONE;
  }
  3)注意:
    > 在一个action中不能同时使用模型驱动和属性封装两种,如果同时使用,执行模型驱动
* 表达式封装(会用,有的书里也将此种封装归为属性封装)
  1)在action里面声明实体类
  2)生成实体类变量的set和get方法
  3)在表单输入项的name属性值里面写表达式形式 user.username
  public class Form4Action extends ActionSupport {
  //声明实体类
  private User user;
  //生成实体类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 NONE;
  }
* 比较表达式封装和模型驱动封装
  1)不同点:模型驱动只能把数据封装到一个实体类对象里面,表达式封装可以封装到不同对象里面

4. struts2获取数据封装到集合中
* 封装到list集合
  在action声明list集合生成set get方法 在表单用 List[0].username

* 封装到map集合
  声明map集合,生成get set方法,在表单输入项的name属性值里面写表达式 map['one'].username

 posted on 2017-11-21 08:49  这名字还可以改吗  阅读(94)  评论(0编辑  收藏  举报