一、通过ActionContext类获取

public class ActionContextDemo extends ActionSupport {

@Override
    public String execute() throws Exception {
        //获取ActionContext对象
        ActionContext context = ActionContext.getContext();
        //调用getParameters对象获取参数
        Map<String, Object> map = context.getParameters();
        //遍历打印map集合
        for (String key : map.keySet()) {
            String[] val = (String[]) map.get(key);
            System.out.println(key + " : " + Arrays.toString(val));
        }
        return NONE;
    }
}

二、通过ServletActionContext类获取request类然后获取

public class ServletActionContextDemo extends ActionSupport {

@Override
    public String execute() throws Exception {
        //获取request
        HttpServletRequest request = ServletActionContext.getRequest();
        //获取参数
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        String[] hobbies = request.getParameterValues("hobbies");
        System.out.println(username + " : " + password + " : " + Arrays.toString(hobbies));
        
        //操作域对象
        //request域
        HttpServletRequest request2 = ServletActionContext.getRequest();
        request2.setAttribute("request", "hello request");
        
        //获取session域
        HttpSession session = request2.getSession();
        session.setAttribute("session", "hello session");
        
        //获取servletcontext域
        ServletContext servletContext = request2.getServletContext();
        servletContext.setAttribute("servletContext", "application");
        return SUCCESS;
    }
    
}

三、属性封装

定义私有的成员变量,变量名称与表单中name属性值一致

提供成员变量的get和set方法(实际上,在数据封装时,仅提供set方法即可。成员变量的属性名也不一定非得跟name属性值一致,但set方法跟的字段setXXX中的XXX必须跟name属性名的首字符大写一致)
public class DataPackagingAction extends ActionSupport {
    private static final long serialVersionUID = 1L;
    private String username;
    private String password;
    private String[] hobbies;
    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[] getHobbies() {
        return hobbies;
    }
    public void setHobbies(String[] hobbies) {
        this.hobbies = hobbies;
    }
    
    @Override
    public String execute() throws Exception {
        System.out.println("属性驱动:  " + username + " : " + password + "  " + Arrays.toString(hobbies));
        return NONE;
    }
    
}

四、基于模型驱动的数据封装方法

  1.让action类实现ModelDriven<T>接口

  2.实现ModelDriven<T>接口中的getModel方法

  3.在Action中创建私有的成员变量,并手动创建实体类

public class DataPackagingAction2 extends ActionSupport implements ModelDriven<User> {

private User user = new User();

@Override
    public User getModel() {
        return user;
    }

@Override
    public String execute() throws Exception {
        System.out.println(user);
        return NONE;
    }
    
}

五、复杂数据的封装方法

1.封装数据到list集合中

  第一步: 在action中声明list成员变量,并手动创建实体类;

  第二部:  提供get和set方法;

  第三部: 在jsp页面中,提供基于list作为值得name属性

public class ListAction extends ActionSupport {
    private List<User> list = new ArrayList<User>();
    public List<User> getList() {
        return list;
    }
    public void setList(List<User> list) {
        this.list = list;
    }  
    @Override
    public String execute() throws Exception {
        for (int i = 0; i < list.size(); i ++) {
            System.out.println(list.get(i));
        }
        return NONE;
    }
}

  在jsp页面中name属性的赋值规则

<form action="${pageContext.request.contextPath}/list.action" method="post">
        username: <input type="text" name="list[0].username" /><br/>
        password: <input type="password" name="list[0].password" /><br/>
        hobby: <input type="checkbox" name="list[0].hobbies" value="basketball" />basketball
        <input type="checkbox" name="list[0].hobbies" value="football" />football
        <input type="checkbox" name="list[0].hobbies" value="badminton" />badminton
        <hr/>
        
        username: <input type="text" name="list[1].username" /><br/>
        password: <input type="password" name="list[1].password" /><br/>
        hobby: <input type="checkbox" name="list[1].hobbies" value="basketball" />basketball
        <input type="checkbox" name="list[1].hobbies" value="football" />football
        <input type="checkbox" name="list[1].hobbies" value="badminton" />badminton
        <hr/>
        
        <input type="submit" value="提交" />
    </form>

2.封装数据到map集合中

  第一步: 在action中声明map成员变量,并手动创建实体类;

  第二部:  提供get和set方法;

  第三部: 在jsp页面中,提供基于map作为值得name属性

public class MapAction extends ActionSupport {
    private Map<String, User> map = new HashMap<String, User>();
    public Map<String, User> getMap() {
        return map;
    }
    public void setMap(Map<String, User> map) {
        this.map = map;
    }
    @Override
    public String execute() throws Exception {
        for (String key : map.keySet()) {
            System.out.println(key + "  " + map.get(key));
        }
        return NONE;
    }
}

在jsp页面中name属性的命名规则

<form action="${pageContext.request.contextPath}/map.action" method="post">
        username: <input type="text" name="map['one'].username" /><br/>
        password: <input type="password" name="map['one'].password" /><br/>
        hobby: <input type="checkbox" name="map['one'].hobbies" value="basketball" />basketball
        <input type="checkbox" name="map['one'].hobbies" value="football" />football
        <input type="checkbox" name="map['one'].hobbies" value="badminton" />badminton
        <hr/>
        
        username: <input type="text" name="map['two'].username" /><br/>
        password: <input type="password" name="map['two'].password" /><br/>
        hobby: <input type="checkbox" name="map['two'].hobbies" value="basketball" />basketball
        <input type="checkbox" name="map['two'].hobbies" value="football" />football
        <input type="checkbox" name="map['two'].hobbies" value="badminton" />badminton
        <hr/>
        
        <input type="submit" value="提交" />
    </form>

3.使用属性封装数据到对象中

  第一步: 在action中声明实体类User的成员变量,可以不用实例化

  第二步: 提供实体类的get和set方法

  第三部: jsp中name属性基于实体类赋值
public class UserAction extends ActionSupport {
    private static final long serialVersionUID = 1L;
    //声明实体类
    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 NONE;
    }
}
jsp页面中name属性的命名规则

 <form action="${pageContext.request.contextPath}/user.action" method="post">
        username: <input type="text" name="user.username" /><br/>
        password: <input type="password" name="user.password" /><br/>
        hobby: <input type="checkbox" name="user.hobbies" value="basketball" />basketball
            <input type="checkbox" name="user.hobbies" value="football" />football
            <input type="checkbox" name="user.hobbies" value="badminton" />badminton
        <hr/>
        <input type="submit" value="提交" />
    </form>

转载于:https://www.cnblogs.com/rodge-run/p/6441636.html

Struts2中数据封装方式相关推荐

  1. Struts2中action获取request、response、session的方式

    2019独角兽企业重金招聘Python工程师标准>>> 第一种方式,非IoC(Spring中的控制反转)方式: package com.action; import java.uti ...

  2. Struts2 中的数据传输的几种方式

    原文地址:http://blog.csdn.net/li_tengfei/article/details/6098126 1.     如何将参数从界面传递到Action? 你可以把Struts2中的 ...

  3. Struts2中jsp前台传值到action后台的三种方式以及valueStack的使用

    struts2中的Action接收表单传递过来的参数有3种方法: 如,登陆表单login.jsp: 1 <form action="login" method="p ...

  4. Struts2中获取HttpServletRequest,HttpSession等的几种方式

    转自:http://www.kaifajie.cn/struts/8944.html package com.log;import java.io.IOException; import java.u ...

  5. Struts2中XXX.Action类中方法的访问(三种方式)

    第一种:使用action标签的method属性(常规方法) Action类: package cn.tedu.web;import org.springframework.context.annota ...

  6. Struts2中的action类

    Struts2中的action类 action类在Struts2中承担了Model(模型)的角色,主要用于处理业务逻辑并存放HTTP请求处理过程中各个变量的值. 在Struts2里面,Action充当 ...

  7. java 值栈的结构_Struts2 | 深入浅出理解struts2中的值栈

    在没有struts框架的时候,我们通常在Servlet中使用域对象进行存值和取值,将其作为载体来承载页面和后台之间的数据传递. 在struts2中,我们又有了一种新的机制来进行数据的传递. 那就是st ...

  8. Struts2中Action接收参数

    Struts2中Action接收参数的方法主要有以下三种: Struts2中Action接收参数的方法主要有以下三种: 1.使用Action的属性接收参数:     a.定义:在Action类中定义属 ...

  9. struts2中 ServletActionContext与ActionContext区别

    1. ActionContext 在Struts2开发中,除了将请求参数自动设置到Action的字段中,我们往往也需要在Action里直接获取请求(Request)或会话(Session)的一些信息, ...

最新文章

  1. 浏览器打不开网页问题
  2. 数据流重定向和管道命令, grep, tr,sort, wc, cut,split,tee,sleep(shell 02)
  3. spring boot 之session的总结
  4. Spring boot -mongodb
  5. boost::gregorian模块实现打印一个月中的所有日期的测试程序
  6. 什么是Boot Loader
  7. nutch mysql hadoop_nutch2.2.1+ hadoop1.2.1 + mysql5.6.13
  8. 实战 SSH 端口转发
  9. 特殊类型结构--枚举
  10. 2 环境设置_VS Code 虚拟环境设置
  11. 欺诈场景中的随机森林实践(基于SAS场景的实现)
  12. BZOJ-1050-[HAOI2006]旅行comf(并查集)
  13. delphi对比易语言_易语言转换delphi 易语言编程100例
  14. 06-maven的profile和Spring boot 的profile整合
  15. Fragstats景观多样性
  16. 水经注下载的地图版权_如何使用水经注万能地图下载器下载谷歌卫星地图
  17. sprintf函数的用法
  18. 我母亲在一家计算机公司工作,关于母亲的作文700字5篇
  19. 数据中台交付标准化参考框架
  20. 【MATLAB】基本数学操作

热门文章

  1. Kali 2017更新源
  2. 安卓实现序列化之Parcelable接口
  3. Linux下暴力破解工具Hydra详解
  4. SGU185 Two shortest(最小费用最大流/最大流)
  5. php构造数组,并把多数组插入php文件
  6. mysql生成app接口_Java实现app接口和Socket消息传递(10)java连接MySQL实现App登录接口...
  7. 表达式前后缀表达形式 [zz]
  8. GIS工具篇(二):GIS最全数据下载指南
  9. AUTOSAR从入门到精通100讲(二十七)-AutoSar模式管理总揽
  10. yum安装odbc驱动linux,在CentOS上离线配置PostgreSQL ODBC数据源