一、通过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>

Struts2中数据封装方式的更多相关文章

  1. Struts2中数据封装机制

    Struts2当中数据封装的三种机制:属性驱动.标签驱动.模型驱动.下面来一一介绍. 一.属性驱动 1.需要提供对应属性的set方法进行数据的封装. 2.表单的哪些属性需要封装数据,那么在对应的Act ...

  2. 十一 三种Struts2的数据封装方式,封装页面传递的数据

    Struts2的数据封装:Struts2是一个web层框架,框架是软件的半成品.提供了数据封装的基本功能. 注:Struts2底层(核心过滤器里面的默认栈里面的拦截器,具体见struts-defaul ...

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

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

  4. Struts2中访问web元素的四种方式

    Struts2中访问web元素的四种方式如下: 通过ActionContext来访问Map类型的request.session.application对象. 通过实现RequestAware.Sess ...

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

    1.     如何将参数从界面传递到Action? 你可以把Struts2中的Action看做是Struts1的Action+ActionForm,即只需在Action中定义相关的属性(要有gette ...

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

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

  7. Struts2中获取Web元素request、session、application对象的四种方式

    我们在学习web编程的时候,一般都是通过requet.session.application(servletcontext)进行一系列相关的操作,request.session.和applicatio ...

  8. struts2中,Action通过什么方式获得用户从页面输入的数据,又是通过什么方式把其自身的数据传给视图的?

    struts2中,Action通过什么方式获得用户从页面输入的数据,又是通过什么方式把其自身的数据传给视图的? 解答: 1)可以直接通过与表单元素相同名称的数据成员(需要存在符合命名规范set和get ...

  9. struts2中Action訪问servlet的两种方式

    一.IoC方式                在struts2框架中,能够通过IoC方式将servlet对象注入到Action中.通常须要Action实现下面接口: a. ServletRequest ...

随机推荐

  1. JSONP获取Twitter和Facebook文章数

    原文链接: Retrieve Twitter and Facebook Counts with JSON 翻译人员: 铁锚 原文日期: 2014年02月19日 翻译日期: 2014年02月22日 !! ...

  2. Gradle 1.12用户指南翻译——第二十八章. Jetty 插件

    其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Github上的地址: https://g ...

  3. Xcode中iOS模拟器程序中的plist路径

    Xcode6.4里写了个简单的iOS程序在模拟器中跑. 其中用到了NSUserDefaults来保存属性文件plist,那么这个文件实际路径在哪里呢?在网上搜了一下,发现几种说法(*表示当前用户名): ...

  4. android 高斯模糊实现

    高斯模糊 高斯模糊就是将指定像素变换为其与周边像素加权平均后的值,权重就是高斯分布函数计算出来的值. 一种实现 点击打开链接<-这里是一片关于高斯模糊算法的介绍,我们需要首先根据高斯分布函数计算 ...

  5. web报表工具FineReport常用函数的用法总结(日期和时间函数)

    web报表工具FineReport常用函数的用法总结(日期和时间函数) 说明:凡函数中以日期作为参数因子的,其中日期的形式都必须是yy/mm/dd.而且必须用英文环境下双引号(" " ...

  6. OpenCV——去雾

    这是一个简化的实现算法,完整的算法请参考: Single Image Haze Removal Using Dark Channel Prior --CVPR 2009 // define head ...

  7. HBase中创建索引

    hbasene(https://github.com/akkumar/hbasene)是开源项目,在hbase存储上封装使用Lucene来创建索引,代码API非常简单,熟悉lucene的朋友可以很方便 ...

  8. 云技术:负载均衡SLB

    什么是SLB? SLB是Server Load Balance(负载均衡)的简称,XX云计算有限公司提供的负载均衡服务,通过设置虚拟服务IP,将位于同一机房的多台云服务器资源虚拟成一个高性能.高可用的 ...

  9. C# / VB.NET合并PDF指定页

    在前面的文章中,我们已经知道如何合并.拆分多个PDF文件,在这篇文章中的合并.拆分PDF文档主要是以方便文档管理的目的来操作文档,在文档查阅.管理及存储上很方便实用.但是我们如果想要合并多个文档中的部 ...

  10. Ubuntu 14.04 32位 JDK+ADT Bundle+NDK安装

    1. 安装JDK tar或GUI解压jdk-8u25-linux-i586.tar.gz 编辑/etc/environment文件 CLASSPATH="/home/zhouwei/jdk1 ...