• 【Java】Struts2中Action接受表单的三种方式


    在Struts2中,假如有一个登陆页面,输入用户名密码。如何在action中接受呢?

    有三种方式:1.使用Action的属性接收参数,2.使用DomainModel接收参数,3.使用ModelDriven接收参数

    1.使用action的属性接受参数

    只需要在处理的action中定义该私有变量(Bean),即可获取到,例如:

    import com.opensymphony.xwork2.ActionSupport;
    
    public class LoginAction extends ActionSupport {
    
        private String name;
        private String pwd;
        
        public String login(){
            if ("admin".equals(name)){
                if ("admin".equals(pwd)){
                    return SUCCESS;
                }
            }
            return INPUT;
        }
        
        // 提供get,set方法
        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;
        }
        
    }

    2.使用DomainModel接收参数

    使用DomainModel时,需要把之前Action中定义的属性,提取到一个JavaBean中。

    如下面的UserBean:

    package com.pojo;
    
    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中添加一个private User user;在form中的名字要与这里的user对象相同。并提供user的get,set方法。

    package com.action;
    
    import com.opensymphony.xwork2.ActionSupport;
    import com.pojo.User;
    
    public class LoginAction extends ActionSupport {
        private User user; //和登录的form填写的对象相同
        
        public String login(){
            if ("han".equals(user.getName())){
                if ("jun".equals(user.getPwd())){
                    return SUCCESS;
                }
            }
            return INPUT;
        }
    
        public User getUser() {
            return user;
        }
    
        public void setUser(User user) {
            this.user = user;
        }
        
    }

    form中对name需要限定传参数给哪个对象。

        <form action="index_login.action" method="post">
        <!-- 指定传入哪个对象的user 和pwd -->
            <input type="text" name="user.name"><br>
            <input type="text" name="user.pwd"><br>
            <input type="submit"><br>
        </form>

    3.使用ModelDriven接收参数(验证输入的时候比较方便,可以重写验证的方法)

    Action:

    package com.action;
    
    import com.opensymphony.xwork2.ActionSupport;
    import com.opensymphony.xwork2.ModelDriven;
    import com.pojo.User;
    
    public class LoginAction extends ActionSupport implements ModelDriven<User> {
        
        private User user = new User(); //和DomaiModel不同,需要实例化
        
        public String login(){
            if ("han".equals(user.getName())){
                if ("jun".equals(user.getPwd())){
                    return SUCCESS;
                }
            }
            return INPUT;
        }
        
    //    去除了user的get,set方法
    //  实现了接口的方法
    //    form中不需要指定哪个对象
        @Override
        public User getModel() {
            return user;  //返回对象
        }
        
    }

    UserBean与前一种相同,不变。

    表单中input的name变了:

        <form action="index_login.action" method="post">
        <!-- 不需要 指定传入哪个对象的user 和pwd -->
            <input type="text" name="name"><br>
            <input type="text" name="pwd"><br>
            <input type="submit"><br>
        </form>

    给List赋值,List<String> book;

    <input type="text" name="book[0]"><input type="text" name="book[1]">,来输入数组

  • 相关阅读:
    C# WebSocket 实现客户端和服务端的通信(二)
    C# WebSocket 实现客户端和服务端的通信(一)
    regsvr32 将dll写入注册表
    Dictionary 添加重复的键值对
    C# Math.Round()的银行家算法
    DataGridView 合并数据相同的行
    获取系统当前日期,分布获取年月日和时分秒
    [Err] ORA-00923: 未找到要求的 FROM 关键字
    正则表达式常用的字符类
    Spring注解作用
  • 原文地址:https://www.cnblogs.com/to-red/p/11146229.html
Copyright © 2020-2023  润新知