zoukankan      html  css  js  c++  java
  • Struts2的数据封装

    Struts2框架是一个web层的框架,web层的框架是一个软件的半成品,提供了数据封装的基本的功能.

    属性驱动的数据封装

    • 属性驱动:提供属性set方法的封装

    jsp页面

    <h3>方式一:属性驱动-提供set的方法的方式</h3>
    <form action=" ${ pageContext.request.contextPath}/userAction1.action" method="post">
        用户名:    <input type="text" name="username"/><br/>
        密码:      <input type="password" name="password"/><br/>
        年龄:      <input type="text" name="age"/><br/>
        生日:      <input type="text" name="birthday"/><br/>
        工资:      <input type="text" name="salary"/><br/>
        <input type="submit" value="提交"/>
    </form>
    

    action页面

    action页面中需要提供所有被封装的数据的set方法

    这种方法并不是很好,因为如果存在多属性封装,那么就需要书写多个set方法

    package demo2;
    
    import com.opensymphony.xwork2.ActionSupport;
    
    import java.util.Date;
    
    /**
     * 数据封装方式一:提供属性的set方法的方式
     */
    public class UserAction1 extends ActionSupport {
        //提供了对应的属性
        private String username;
        private String password;
        private Integer age;
        private Date birthday;
        private Double salary;
        //提供对应的set方法
    
        public void setUsername(String username) {
            this.username = username;
        }
    
        public void setPassword(String password) {
            this.password = password;
        }
    
        public void setAge(Integer age) {
            this.age = age;
        }
    
        public void setBirthday(Date birthday) {
            this.birthday = birthday;
        }
    
        public void setSalary(Double salary) {
            this.salary = salary;
        }
    
        @Override
        public String execute() throws Exception {
            //接收数据;
            System.out.println(username);
            System.out.println(password);
            System.out.println(age);
            System.out.println(salary);
            System.out.println(birthday);
    
            //封装数据;
            return NONE;
        }
    }
    
    • 属性驱动:在页面中提供表达式

    属性驱动的方法,主要需要在jsp页面中配置

    jsp页面的书写

    注意,需要在属性前面写上属性所属对象,user.username

    <h3>方式二:属性驱动-在页面中提供表达式</h3>
    <form action=" ${ pageContext.request.contextPath}/userAction2.action" method="post">
        用户名:    <input type="text" name="user.username"/><br/>
        密码:      <input type="password" name="user.password"/><br/>
        年龄:      <input type="text" name="user.age"/><br/>
        生日:      <input type="text" name="user.birthday"/><br/>
        工资:      <input type="text" name="user.salary"/><br/>
        <input type="submit" value="提交"/>
    </form>
    

    action页面的书写

    action页面书写的时候,首先需要创建封装对象的实例,然后需要在action中创建需要封装对象的Getter And Setter,该方法与action的关系不大,主要是依靠jsp页面,以及前端控制器,在action方法之中一定要写上get的方法,这样前端控制器才可以取到在action页面中的private的需要封装的对象。

    package demo2;
    
    import com.opensymphony.xwork2.ActionSupport;
    import domain.User;
    
    /**
     * 数据封装的方式二 属性驱动 在页面中提供表达式
     */
    public class UserAction2 extends ActionSupport {
        //提供一个私有的对象
        private User user = new User();
        //提供User的set和get方法,必须要提供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;
        }
    }
    

    使用表达式的方法可以同时向多个对象进行数据的封装

    模型驱动的数据封装

    模型驱动的方式是最常用的方式,缺点在于同时只能向一个对象中封装数据

    jsp页面的书写

    注意,在模型驱动的数据封装之中与jsp的页面关系不大,与set方法的封装方式一样

    <h3>方式三:模型驱动-采用模型驱动的方式</h3>
    <form action=" ${ pageContext.request.contextPath}/userAction3.action" method="post">
        用户名:    <input type="text" name="username"/><br/>
        密码:      <input type="password" name="password"/><br/>
        年龄:      <input type="text" name="age"/><br/>
        生日:      <input type="text" name="birthday"/><br/>
        工资:      <input type="text" name="salary"/><br/>
        <input type="submit" value="提交"/>
    </form>
    

    action页面的书写

    action页面中,首先要实现ModelDriven< User >接口,注意接口要实现被封装对象的泛型,然后需要手动提供对象的实例。然后需要实现接口的getModel的方法

    package demo2;
    
    import com.opensymphony.xwork2.ActionSupport;
    import com.opensymphony.xwork2.ModelDriven;
    import domain.User;
    
    /**
     * 数据封装的方式三 模型驱动的方式封装数据
     */
    public class UserAction3 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;
        }
    }
    
    
  • 相关阅读:
    【Java学习系列】第3课--Java 高级教程
    【夯实PHP基础】nginx php-fpm 输出php错误日志
    【夯实Mysql基础】MySQL性能优化的21个最佳实践 和 mysql使用索引
    【架构设计】分布式文件系统 FastDFS的原理和安装使用
    【13】2016.12.13 周二--《小结2016》
    【诗词歌赋】2016.12.15 周四--文言鸿儒《年终的日常》
    【算法】(查找你附近的人) GeoHash核心原理解析及代码实现
    【夯实Nginx基础】Nginx工作原理和优化、漏洞
    【夯实PHP基础】PHP的反射机制
    HTML DOM简易学习笔记
  • 原文地址:https://www.cnblogs.com/limushu/p/10063087.html
Copyright © 2011-2022 走看看