zoukankan      html  css  js  c++  java
  • 十一、Struts2封装请求参数的方式

    十一、Struts2封装请求参数的方式

    方式一、Action 本身作为model对象,通过成员setter封装(一个名字为params的拦截器干的)

    注意:表单中的名称要和动作类中的名称一致(这是必须的)

    表单代码:

    <br /> ---------------封装请求参数到Action-----------<br />

        

        <form action="${pageContext.request.contextPath }/paramAction1.action"

            method="post">

            用户名:<input type="text" name="username"/> <br/>

            密码: <input type="password" name="password"/> <br/>

            <input type="submit" value="登录">        

        </form>

     

    Struts.xml文件中的代码:

    <package name="p1" extends="struts-default">

            <action name="paramAction" class="com.itheima.action.ParamAction1"

                method="execute">

                

            </action>

        </package>

     

    动作类中的代码:

    //用动作类封装数据:定义字段名。提供setter方法,setter属性名称和表单的输入域中的名称保持一致

    public class ParamAction1 extends ActionSupport{

        private String username;

        private String password;

        

        public void setUsername(String username) {

            this.username = username;

        }

        

        public void setPassword(String password) {

            this.password = password;

        }

        

        @Override

        public String execute() throws Exception {

            System.out.println(username + ":" + password);

            //这里可以调用service层的方法保存对象:save(this)

            return NONE;

        }

    }

     

    方式二:动作类和模型分开

    表单代码:

    <br /> ------封装请求参数到模型对象中Action和模型分开------<br />

        

        <form action="${pageContext.request.contextPath }/paramAction2.action"

            method="post">

            用户名:<input type="text" name="user.username"/> <br/>

            密码: <input type="password" name="user.password"/> <br/>

            <input type="submit" value="登录">        

        </form>

     

    -------------

    动作类代码:

    //用动作类封装数据:定义字段名。提供setter方法,setter属性名称和表单的输入域中的名称保持一致

    public class ParamAction2 extends ActionSupport {

        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);

            // 这里可以调用service层的方法保存对象:save(user)

            return NONE;

        }

    }

     

    ------------

    实体类:User.java

    //实体类:

    public class User implements Serializable {

        private String username;

        private String password;

     

        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;

        }

     

        @Override

        public String toString() {

            return "User [username=" + username + ", password=" + password + "]";

        }

    }

     

    方式三:模型驱动(面试)

    表单代码:

    <br/>----封装请求参数到模型对象中:Action和模型分开。模型驱动------<br/>

        

        <form action="${pageContext.request.contextPath }/paramAction3.action"

            method="post">

            用户名:<input type="text" name="username"/> <br/>

            密码: <input type="password" name="password"/> <br/>

            <input type="submit" value="登录">        

        </form>

     

    动作类代码:

    //动作类和实体类分开

    public class ParamAction3 extends ActionSupport implements ModelDriven<User> {

        // 此处必须创建一个对象

        private User user = new User();;

     

        @Override

        public String execute() throws Exception {

            System.out.println(user);

            // 这里可以调用service层的方法保存对象:save(user)

            return NONE;

        }

        

        @Override

        public User getModel() {

            //这里需要返回一个对象

            return user;

        }

    }

     

    注:模型驱动实际上是由一个拦截器来做的。modelDriven拦截器来做。把getModel方法返回的对象,压入一个叫做ValueStack的栈顶。struts框架就会根据表单的name属性,调用对应栈顶对象的setter方法,从而把请求参数封装进来。

     

    封装数据到集合类型Collection中:

    表单代码:

    <body>

        <br/>-----封装请求参数到集合中:使用场景,批量添加-----<br/>

        <form action="${pageContext.request.contextPath }/paramAction4" method="post">

            用户名:<input type="text" name="users[0].username"/>

            密码:<input type="password" name="user[0].password"/><br/>

            用户名:<input type="text" name="users[1].username"/>

            密码:<input type="password" name="user[1].password"/><br/>

            用户名:<input type="text" name="users[2].username"/>

            密码:<input type="password" name="user[2].password"/><br/>

            <input type="submit" value="添加">

        </form>

    </body>

     

    动作类代码:

    //数据封装到集合中

    public class ParamAction4 extends ActionSupport {

        // 定义一个集合

        private Collection<User> users;

     

        public Collection<User> getUsers() {

            return users;

        }

     

        // 通过该方法将对象注入到集合中,不用显示的添加对象到集合中

        public void setUsers(Collection<User> users) {

            this.users = users;

        }

     

        public String execute() throws Exception {

            for (User user : users) {

                System.out.println(user);

            }

            return NONE;

        }

    }

     

    封装数据到Map中

    表单代码:

    <br/>-----封装请求参数到Map中:使用场景,批量添加-----<br/>

        <form action="${pageContext.request.contextPath }/paramAction5" method="post">

            用户名:<input type="text" name="users.u1.username"/>

            密码:<input type="password" name="users.u1.password"/><br/>

            用户名:<input type="text" name="users['u2'].username"/>

            密码:<input type="password" name="user['u2'].password"/><br/>

            <input type="submit" value="添加">

        </form>

     

    动作类代码:

    //数据封装到集合中

    public class ParamAction5 extends ActionSupport {

        // 定义一个Map集合

        private Map<String, User> users;

     

        // 提供相应的settergetter方法

        public Map<String, User> getUsers() {

            return users;

        }

     

        public void setUsers(Map<String, User> users) {

            this.users = users;

        }

     

        @Override

        public String execute() throws Exception {

            for (Map.Entry<String, User> me : users.entrySet()) {

                System.out.println(me.getKey() + "=" + me.getValue());

            }

            return NONE;

        }

    }

     

  • 相关阅读:
    云路五年 未来正来
    免费公测:RDS只读实例
    【Open Search产品评测】-- 淘点点:基于OpenSearch,轻松实现一整套O2O类搜索解决方案
    阿里云启动“云合计划” 培育中国“微软”级企业
    【Open Search产品评测】- 来往,7天轻松定制属于自己的搜索引擎
    水塘抽样算法
    如何调度考生的座位
    如何去除有序数组的重复元素
    二分查找高效判定子序列
    如何k个一组反转链表
  • 原文地址:https://www.cnblogs.com/Prozhu/p/5886419.html
Copyright © 2011-2022 走看看