• struts2 之 struts2数据处理


    开门见山,struts2的数据处理总结:

    1. 在servlet中,如果要获取页面提交的数据要使用requerst.getParameter方法来获取,并且每次需要进行相关的类型转换工作,数据的获取及转换工作比较简单,并且是重复的操作,在struts2中提供了一种比较优秀的方式来接收和转换数据。

    2. 获取表单中的数据可以有多种方式:

      (1)属性驱动方式

      (2)对象驱动方式

      (3)模型驱动方式

    3. 属性驱动:页面表单中表单域的名称和action的属性一致,并且在action中提供属性的get/set方法,那么struts2会自动将数据设置到action的属性上,在处理方法中可以直接获取表单值。为action的属性设置了get方法,那么在页面中就可以通过el表达式获取属性值。


    实例:

    jsp页面:

    <form action="login.action" method="post">
        username:<input type="text" name="username"/><br>
        password:<input type="password" name="password"/><br>
        <input type="submit" value="login"/>
        </form>

    Action处理类:

    public class UserAction {
        private String username;
        private String password;
        //登录处理方法
        public String login(){
            System.out.println("用户名:"+username+"	密码:"+password);
            if("siggy".equals(username)&&"1111".equals(password)){
                //登录成功
                /**
                 * Action.SUCCESS="success"; 表示action执行成功,并且需要展示页面
                 * Action.NONE="none";表示action执行成功,不需要视图展示页面
                 * Action.ERROR="error";表示action执行失败,需要一个失败页面进行展示
                 * Action.INPUT="input";表示如果action要执行成功,需要更多的输入信息。
                 * Action.LOGIN="login";表示需要用户登录方可访问
                 */
                
                //return "success";
                return Action.SUCCESS;
            }
            return "login";
        }
        
        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;
        }
    }

    4. 对象驱动:在action类中,将对象设置属性,并且提供get/set方法。在页面中表单域名称是action类中对象的 对象名.属性。在对象类中提供对应属性的get/set方法即可。这样在action的处理类获取的将会是对象。

    优点:不用在处理类中封装对象

    缺点:jsp中表单域名称有重复的地方

    实例如:

    Vo类:

    public class User {
        private String name;
        private String pwd;
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public String getPwd() {
            return pwd;
        }
        public void setPwd(String pwd) {
            this.pwd = pwd;
        }
    }

    Action 处理类:

    public class UserObjectAction {
        private User user;
        public String login(){
            System.out.println("用户名:"+user.getName()+"	密码:"+user.getPwd());
            if("siggy".equals(user.getName())&&"1111".equals(user.getPwd())){
                return Action.SUCCESS;
            }
            return "login";
        }
        public User getUser() {
            return user;
        }
        public void setUser(User user) {
            this.user = user;
        }
    }

    jsp页面:

    <form action="loginObject.action" method="post">
        username:<input type="text" name="user.name"/><br>
        password:<input type="password" name="user.pwd"/><br>
        <input type="submit" value="login"/>
        </form>

    5. 模型驱动:由于对象驱动在页面中有重复的代码,当类的属性比较多时,开发效率比较低。模型驱动使得页面的表单域名称和类的属性名一致,action处理类需要实现ModelDriven接口即可。

    实例如:

    jsp页面:

    <form action="loginModel.action" method="post">
        username:<input type="text" name="name"/><br>
        password:<input type="password" name="pwd"/><br>
        <input type="submit" value="login"/>
        </form>

    Vo类:

    public class User {
        private String name;
        private String pwd;
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public String getPwd() {
            return pwd;
        }
        public void setPwd(String pwd) {
            this.pwd = pwd;
        }
    }

    Action处理类:

    public class UserModelAction implements ModelDriven<User>{
        private User user;
        public String login(){
            System.out.println("用户名:"+user.getName()+"	密码:"+user.getPwd());
            if("siggy".equals(user.getName())&&"1111".equals(user.getPwd())){
                return Action.SUCCESS;
            }
            return "login";
        }
        public User getModel() {
            return user = new User();
        }
        public User getUser() {
            return user;
        }
    
        public void setUser(User user) {
            this.user = user;
        }
    }
  • 相关阅读:
    如何让nacos中服务注册的ip是自定义的网段ip ( docker swarm )
    docker swarm集群节点打标签
    mysql 8 设置大小写不敏感
    mysql 8 安装&账户权限控制
    I/O(输入/输出)---序列化与反序列化
    I/O(输入/输出)---字节流与字符流
    I/O(输入/输出)---File类
    转发与重定向的区别
    application的使用(实现计数器)
    HTML的相关路径与绝对路径的问题---通过网络搜索整理
  • 原文地址:https://www.cnblogs.com/forever2h/p/6708250.html
Copyright © 2020-2023  润新知