Struts2中数据封装方式

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/372868.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第五章、搭建S3C6410开发板的测试环境

通过对本章的学习&#xff0c;我对s3c6410开发板的测试环境有了一定的认识&#xff0c;并掌握了如下的知识点&#xff1a;一、对于s3c6410这款开发板&#xff0c;它是一款低功耗、高性价比的处理器&#xff0c;它是基于ARM11的内核。二、不同开发板的区别主要在烧录嵌入式系统的…

IBM JVM调整– gencon GC策略

本文将向您详细介绍从Java虚拟机&#xff08;例如HotSpot或JRockit&#xff09;迁移到IBM JVM时重要的Java堆空间调整注意事项。 该调整建议基于我为我的一个IT客户端执行的最新故障排除和调整任务。 IBM JVM概述 正如您可能从其他文章中看到的那样&#xff0c;IBM JVM在某些方…

mysql主从配置错误_mysql主从配置失败,主从通讯失败

配置mysql主从的时候&#xff0c;检查slave状态&#xff0c;发现报错信息&#xff0c;Error The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement on query.mysql> show slave status\G*************************** 1. r…

echarts如何显示在页面上

echarts如何显示在页面上 1.引入echarts的相关.js文件 <script src"js/echarts.min.js"></script> 2.新建一个div&#xff0c;style自己定&#xff0c;但必须要有width和height <div id"history_state" style"width: 400px;height: 20…

懒惰的JSF Primefaces数据表分页–第2部分

页面代码非常简单&#xff0c;没有复杂性。 检查“ index.xhtml”代码&#xff1a; <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns"http://www…

二分匹配之最大权值匹配算法---KM模板

百科&#xff1a;http://baike.baidu.com/link?urlvbM3H4XmfrsWfP-epdlR2sVKSNzOq4hXnWDqm5uo8fd7VWsF2SmhDV35XyVUDvVjvrtf42RUITJuNCHn-7_x6K 大神总结&#xff1a;http://www.cnblogs.com/skyming/archive/2012/02/18/2356919.html 代码&#xff1a; 1 #include<stdio.h…

java实现报表_用存储过程和 JAVA 写报表数据源有什么弊端?

用存储过程和 JAVA 写报表数据源有什么弊端&#xff1f;跟着小编一起来一看一下吧&#xff01;我们在报表开发中经常会使用存储过程准备数据&#xff0c;存储过程支持分步计算&#xff0c;可以实现非常复杂的计算逻辑&#xff0c;为报表开发带来便利。所以&#xff0c;报表开发…

SpringMVC学习笔记整理

SpringMVC学习笔记 以下是我整理的SpringMVC学习笔记&#xff1a; 导入jar包 一&#xff1a;springmvc工作流程。 ①. servlet容器初始化一个request请求 ②. DispatcherServlet分发器负责发送请求到映射器. ③. despatcherServlet把请求交给处理器映射Mapping&…

Java EE重新审视设计模式:异步

尽管您可能找不到作为设计模式列出的异步方法调用&#xff0c;但我还是值得一提。 因此&#xff0c;这是我的JavaEE Revisits设计模式系列的最后一篇文章。 异步方法调用只不过是多线程。 基本上&#xff0c;它是指将在单独的线程中运行的方法调用&#xff0c;因此主&#xff0…

am335x watchdog

am335x watchdog 内核文档kernel/Documentation/watchdog Qtaplex:~/kernel/7109/linux-3.2.0/Documentation/watchdog$ ll total 88 drwxrwxr-x 3 Qt Qt 4096 Jun 8 15:11 ./ drwxrwxr-x 94 Qt Qt 12288 Apr 28 13:09 ../ -rwxrwxr-x 1 Qt Qt 576 Nov 20 2013 00-INDEX -rwxrw…

springboot2 使用hikaridatasource 并测试_基于Spring Boot 2.x的后端管理网站脚手,源码免费分享...

基于Spring Boot 2.x 的 Material Design 的后端管理网站脚手架 &#xff1a;提供权限认证 用户管理 菜单管理 操作日志 等常用功能去繁就简 重新出发基于Spring Boot 集成一些常用的功能&#xff0c;你只需要基于它做些简单的修改即可。功能列表&#xff1a;权限认证权限管理用…

测试驱动开发–双赢策略

敏捷从业人员谈论测试驱动开发 &#xff08;TDD&#xff09;&#xff0c;所以许多关心代码质量和可操作性的开发人员也是如此。 我曾几何时&#xff0c;不久前设法阅读了有关TDD的文章。 据我了解&#xff0c;TDD的关键是&#xff1a; 编写测试&#xff0c;但失败 代码&#x…

设计模式学习(三)——装饰器模式

前言 距离上一次正儿八经地写随笔已经有一段时间了&#xff0c;虽然2月10号有一篇关于泛型的小记&#xff0c;但是其实只是简单地将自己的学习代码贴上来&#xff0c;为了方便后续使用时查阅&#xff0c;并没有多少文字和理解感悟。之所以在今天觉得有必要写点东西&#xff0c;…

swift - 导航栏设置

话不多&#xff0c;直接贴代码&#xff1a; let nav UINavigationController.init(rootViewController: viewController) nav.topViewController?.title title// 设置导航栏的标题 nav.navigationBar.tintColor .whiteColor()// 设置push出的导航栏的返回颜色(箭头及文字) …

mysql5.6主从复制(读写分离)方案_MySQL5.6主从复制(读写分离)方案

MySQL5.6主从复制(读写分离)方案一、前言&#xff1a;为什么MySQL要做主从复制(读写分离)&#xff1f;通俗来讲&#xff0c;如果对数据库的读和写都在同一个数据库服务器中操作&#xff0c;业务系统性能会降低。为了提升业务系统性能&#xff0c;优化用户体验&#xff0c;可以通…

在实践中使用延迟队列

通常&#xff0c;在某些情况下&#xff0c;当您有某种工作或作业队列时&#xff0c;有必要不立即处理每个工作项或作业&#xff0c;而是要延迟一些时间。 例如&#xff0c;如果用户单击一个按钮来触发要完成的某项工作&#xff0c;而一秒钟后&#xff0c;用户意识到他/她错了&a…

PCL学习八叉树

建立空间索引在点云数据处理中有着广泛的应用&#xff0c;常见的空间索引一般 是自顶而下逐级划分空间的各种空间索引结构&#xff0c;比较有代表性的包括BSP树&#xff0c;KD树&#xff0c;KDB树&#xff0c;R树&#xff0c;四叉树&#xff0c;八叉树等索引结构&#xff0c;而…

Android实现自定义带文字和图片的Button

在Android开发中经常会需要用到带文字和图片的button&#xff0c;下面来讲解一下常用的实现办法。 一.用系统自带的Button实现 最简单的一种办法就是利用系统自带的Button来实现&#xff0c;这种方式代码量最小。在Button的属性中有一个是drawableLeft&#xff0c;这个 属性可以…

mysql语句中的注释方法_MySQL语句注释方式简介

MySQL支持三种注释方式&#xff1a;1.从‘#字符从行尾。2.从‘-- 序列到行尾。请注意‘-- (双破折号)注释风格要求第2个破折号后面至少跟一个空格符(例如空格、tab、换行符等等)。3.从/*序列到后面的*/序列。结束序列不一定在同一行中&#xff0c;因此该语法允许注释跨越多行。…

aqlserver实用程序_sqlserver命令提示实用工具的介绍

除上述的图形化管理工具外&#xff0c;SQL Server2008还提供了大量的命令行实用工具&#xff0c;包括bcp、dtexec、dtutil、osql、reconfig、sqlcmd、sqlwb和tablediff等&#xff0c;下面进行简要说明。dtexec实用工具用于配置和执行SQL Server2008 Intgration Services包。用户…