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;
        }
    }
    
    
  • 相关阅读:
    ExtJS小技巧
    Oracle 表的行数、表占用空间大小,列的非空行数、列占用空间大小 查询
    NPM 私服
    IDEA 不编译java以外的文件
    SQL 引号中的问号在PrepareStatement 中不被看作是占位符
    Chrome 浏览器自动填表呈现淡黄色解决
    批量删除Maven 仓库未下载成功.lastupdate 的文件
    Oracle 11g 监听很慢,由于监听日志文件太大引起的问题(Windows 下)
    Hibernate 自动更新表出错 建表或添加列,提示标识符无效
    Hibernate 自动更新表出错 More than one table found in namespace
  • 原文地址:https://www.cnblogs.com/limushu/p/10063087.html
Copyright © 2011-2022 走看看