zoukankan      html  css  js  c++  java
  • JavaWeb学习:Struts2的数据封装

    获取页面表单数据的方式:根本是通过request对象的getParameterMap();

    Map<String, String[]> map=request.getParameterMap();

    但是如果能把这些数据封装到对象中,我们使用起来是不是方便些。

    Struts2中Params拦截器提供了表单数据封装的几种方式

    • 属性驱动:提供属性set方法(不常用)
    • 属性驱动:页面中提供表达式
      • 可以封装多个对象的数据
    • 模型驱动:采用模型驱动方式(最常用)
      • 只能封装一个对象的数据

    一、属性驱动(属性set方法)

      ①、index.jsp

    <form action="${pageContext.request.contextPath}/user1.action" method="post">
        UserName:<input type="text" name="username" /><br />
        password:<input type="password" name="password" /><br />
        age:<input type="text" name="age" /><br />
        birthday:<input type="text" name="birthday" /><br />
        salary:<input type="text" name="salary" /><br />
        <input type="submit" name="submit" />
    </form>

      ②、User

    public class User {
        private String username;
        private String password;
        private Integer age;
        private Date birthday;
        private Double salary;
        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 Integer getAge() {
            return age;
        }
        public void setAge(Integer age) {
            this.age = age;
        }
        public Date getBirthday() {
            return birthday;
        }
        public void setBirthday(Date birthday) {
            this.birthday = birthday;
        }
        public Double getSalary() {
            return salary;
        }
        public void setSalary(Double salary) {
            this.salary = salary;
        }
        @Override
        public String toString() {
        return "User [username=" + username + ", password=" + password + ", age=" + age + ", birthday=" + birthday
            + ", salary=" + salary + "]";
        }
    }

      ③、Action

    public class User1Action extends ActionSupport {
        // 1、提供对应的属性
        private String username;
        private String password;
        private Integer age;
        private Date birthday;
        private Double salary;
        
        // 2、提供属性对应的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 {
        // 3、接收数据:
        System.out.println(username);
        System.out.println(password);
        System.out.println(age);
        System.out.println(birthday);
        System.out.println(salary);
        return NONE;
        }
    }

      ④、struts_user.xml

    <?xml version="1.0" encoding="UTF-8" ?>
    
    <!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
        "http://struts.apache.org/dtds/struts-2.5.dtd">
    
    <struts>
        <package name="strutsdemo2" extends="struts-default" namespace="/">
            <action name="user1" class="com.xxx.web.action.user.User1Action"></action>
        </package>
    </struts>

      ⑤、struts.xml

    <include file="com/xxx/web/action/user/struts_user.xml"></include>

    二、属性驱动(页面提供表达式)

      ①、index.jsp

    <form action="${pageContext.request.contextPath}/user2.action" method="post">
        UserName:<input type="text" name="user.username" /><br />
        password:<input type="password" name="user.password" /><br />
        age:<input type="text" name="user.age" /><br />
        birthday:<input type="text" name="user.birthday" /><br />
        salary:<input type="text" name="user.salary" /><br />
        <input type="submit" name="user.submit" />
    </form>

      ②、Action

    public class User2Action extends ActionSupport {
        // 1、私有属性对象变量
        // 2、私有属性对象变量提供get、set方法
        private User user;
    
        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;
        }
    }

      ④、struts_user.xml

    <action name="user2" class="com.xxx.web.action.user.User2Action"></action>

    三、模型驱动

      ①、index.jsp

    <form action="${pageContext.request.contextPath}/user2.action" method="post">
        UserName:<input type="text" name="username" /><br />
        password:<input type="password" name="password" /><br />
        age:<input type="text" name="age" /><br />
        birthday:<input type="text" name="birthday" /><br />
        salary:<input type="text" name="salary" /><br />
        <input type="submit" name="submit" />
    </form>

      ②、Action

    public class User3Action extends ActionSupport implements ModelDriven<User>{
        // 1、implements ModelDriven<User>
        // 2、提供实例化对象
        // 3、重写getModel方法
        private User user=new User();
    
        @Override
        public User getModel() {
            return user;
        }
        
        @Override
        public String execute() throws Exception {
            System.out.println(user);
            return NONE;
        }
    }

      ③、struts_user.xml

    <action name="user3" class="com.xxx.web.action.user.User3Action"></action>

    四、复杂数据结构(List) -- 以下的数据结构需要使用属性驱动(页面提供表达式)

    public class ViewModel {
        private List<Product> products;
        
        public List<Product> getProducts() {
            return products;
        }
        public void setProducts(List<Product> products) {
            this.products = products;
        }
    }

      ①、index.jsp(products和ViewModel中的products一致

    <form action="${pageContext.request.contextPath}/product1.action" method="post">
        ProductName:<input type="text" name="model.products[0].name" /><br />
        ProductPrice:<input type="text" name="model.products[0].price" /><br />
        ProductName:<input type="text" name="model.products[1].name" /><br />
        ProductPrice:<input type="text" name="model.products[1].price" /><br />
        ProductName:<input type="text" name="model.products[2].name" /><br />
        ProductPrice:<input type="text" name="model.products[2].price" /><br />
        <input type="submit" name="submit" />
    </form>

      ②、Action (Action 的model 和index.jsp中model对应的

    public class Product1Action extends ActionSupport {
        
        private ViewModel model;
    
        public ViewModel getModel() {
            return model;
        }
    
        public void setModel(ViewModel model) {
            this.model = model;
        }
    
        @Override
        public String execute() throws Exception {
        for (Product product :  model.getProducts()) {
            System.out.println(product);
        }
        return NONE;
        }
    }

      ③、struts_product.xml

    <?xml version="1.0" encoding="UTF-8" ?>
    
    <!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
        "http://struts.apache.org/dtds/struts-2.5.dtd">
    
    <struts>
        <package name="strutsdemo3" extends="struts-default" namespace="/">
            <action name="product1" class="com.xxx.web.action.product.Product1Action"></action>
        </package>
    </struts>

      ④、struts.xml

    <include file="com/xxx/web/action/product/struts_product.xml"></include>

    五、复杂数据结构(Map)  

    public class ViewModel {
        private Map<String,Product> map;
    
        public Map<String, Product> getMap() {
            return map;
        }
    
        public void setMap(Map<String, Product> map) {
            this.map = map;
        }
    }

      ①、index.jsp(map和ViewModel中的map一致

    <form action="${pageContext.request.contextPath}/product2.action" method="post">
        ProductName:<input type="text" name="model.map['0'].name" /><br />
        ProductPrice:<input type="text" name="model.map['0'].price" /><br />
        ProductName:<input type="text" name="model.map['1'].name" /><br />
        ProductPrice:<input type="text" name="model.map['1'].price" /><br />
        ProductName:<input type="text" name="model.map['2'].name" /><br />
        ProductPrice:<input type="text" name="model.map['2'].price" /><br />
        <input type="submit" name="submit" />
    </form>

      ②、Action

    public class Product2Action extends ActionSupport {
        
        private ViewModel model;
    
        public ViewModel getModel() {
            return model;
        }
    
        public void setModel(ViewModel model) {
            this.model = model;
        }
    
        @Override
        public String execute() throws Exception {
        for (String key :  model.getMap().keySet()) {
            System.out.println(key+"    "+model.getMap().get(key));
        }
        return NONE;
        }
    }
  • 相关阅读:
    C# 5.0 CallerMemberName CallerFilePath CallerLineNumber 在.NET4中的使用
    Protocol Buffers 语法指南
    ERP、SCM及电子商务关系分析
    ]进程注入是王道之为NhibernateProfiler增加“附加到进程”功能原理(源码)
    架构师职位与软件文档的思考
    OSGI:从面向接口编程来理解OSGI
    开源的.NET桌面程序自动更新组件 ——Sharp Updater 2.1发布
    C#开源文件实时监控工具Tail&TailUI
    SQL 存储过程入门(变量)
    Python入门笔记(2):基础(上)
  • 原文地址:https://www.cnblogs.com/WarBlog/p/14043110.html
Copyright © 2011-2022 走看看