• struts2深入浅出(二)


    今天内容
    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

  • 相关阅读:
    《原創》實現禁止 WTL CTabView 中標籤的拖曳行為。 (Disable Dragging Operation of CTabView)
    《轉貼》ATL NTService 運作流程
    《轉貼》WTL 之 m_hWndMDIClient
    《原創》加強版的 C++ 字串型別
    《原創》建立最基礎的 Irrlicht 3D 引擎的應用框架。(for vc2008)
    《轉貼》關於 ios::app 與 ios::ate 簡易說明
    《轉貼》WTL for MFC programmer 系列文章
    《轉貼》以Virtual Inheritance及Template讓C++能實現C#中的sealed
    Oracle学习笔记(concat和substr)
    Oralce学习笔记(sql取一张表的数据插入另一张表)
  • 原文地址:https://www.cnblogs.com/stefan95/p/7871420.html
Copyright © 2020-2023  润新知