• Struts2 03---数据封装+获取表单提交数据


        Struts的数据封装分为三种:属性封装,模型驱动,表达式封装。下面以获取表单提交数据来简单介绍一下Struts的数据封装。

    <form action="loginlogin.action" method="post">
    用户名:<input name="username" ><br>
    密码:<input name="pwd" type="password"><br>
    <input type="submit" value="登录">
    </form>

      使用第一种方法,属性封装来获取数据的时候需要将form表单内的两个name值进行封装:

    package com.action;
    
    import com.opensymphony.xwork2.ActionSupport;
    import com.sun.net.httpserver.Authenticator.Success;
    public class LoginbAction extends ActionSupport {
        private String username;
        private String pwd;
    
        public String getUsername() {
            return username;
        }
    
        public void setUsername(String username) {
            this.username = username;
        }
    
        public String getPwd() {
            return pwd;
        }
    
        public void setPwd(String pwd) {
            this.pwd = pwd;
        }
    
        @Override
        public String execute() throws Exception {
        System.out.println("获取到的表单数据:"+username+"---"+pwd);
            return SUCCESS;
        }
    }

    第二种方式,模型驱动;

     1.创建实体类(属性名必须和表单的name属性值一模一样)

    package com.entity;
    
    /**
     * 
     * @ClassName: ELogin
     * @Description: 模型驱动的实体层
     * @author Administrator
     * @date 2017年10月10日 下午6:46:00
     *
     */
    public class ELogin {
        private String username;
        private String pwd;
    
        public String getUsername() {
            return username;
        }
    
        public void setUsername(String username) {
            this.username = username;
        }
    
        public String getPwd() {
            return pwd;
        }
    
        public void setPwd(String pwd) {
            this.pwd = pwd;
        }
    
    }

    2.action实现ModelDriven接口, 实例化一个对象,实现ModelDriven接口的getModel方法,方法返回的是实例化对象的变量名。

    package com.action;
    
    import com.entity.ELogin;
    import com.opensymphony.xwork2.ActionSupport;
    import com.opensymphony.xwork2.ModelDriven;
    /**
     * 
    * @ClassName: LoginAction
    * @Description: 模型驱动  通过反射获取提交过来的属性值
    * @author Administrator
    * @date 2017年10月10日 下午6:44:46
    *
     */
    public class LoginAction extends ActionSupport implements ModelDriven<ELogin>{
        
        public String login(){
            System.out.println("获取到表单数据:"+elogin.getUsername()+"---"+elogin.getPwd());
            return NONE;
        }
        
    @Override
    public String execute() throws Exception {
        
        return super.execute();
    }
    
    private ELogin elogin=new ELogin();
    @Override
    public ELogin getModel() {
        
        return elogin;
    }
    
    }

    第三种方式:表达式封装;

    1.和模型驱动一样,表达式封装也需要创建一个实体类。

    2.在LoginAAction类中声明实体类(这里不需要实例化),再生成实体类对象名的set和get的方法。

    package com.action;
    
    import com.entity.ELogin;
    import com.opensymphony.xwork2.ActionSupport;
    
    /**
     * 
    * @ClassName: LoginaAction
    * @Description: 表达式封装
    * @author py
    * @date 2017年10月10日 下午6:48:11
    *
     */
    public class LoginaAction extends ActionSupport{
        
        private ELogin elogin;
        
        public ELogin getElogin() {
            return elogin;
        }
        public void setElogin(ELogin elogin) {
            this.elogin = elogin;
        }
    @Override
    public String execute() throws Exception {
     System.out.println("获取到表单数据:"+elogin.getUsername()+"---"+elogin.getPwd());
    return SUCCESS; 
    }
    }

    3.和模型驱动不同的是,这里的表单name属性需要做一个修改,要用对象变量名.属性名。

    <form action="newlogin.action" method="post">
    用户名:<input name="elogin.username" ><br>
    密码:<input name="elogin.pwd" type="password"><br>
    <input type="submit" value="登录">
    </form>

    这三种方式都可以获取到表单提交的值。但是要注意的是:在一个action中不能给对同一个表单使用属性封装和模型封装,如果使用只会执行模型驱动封装。

    表达式封装和模型封装的相同点以及不同点:

    相同点:
    都可以把数据封装到实体类中

    不同点:
    模型封装只能够把数据封装到一个实体类中,在一个action里面只能实现一次ModelDriven的接口所以模型封装只会封装一个到一个实体类中,

    表达式封装可以吧数据封装到多个对象中。

  • 相关阅读:
    Windows 2008 R2 安装 Windows phone 7 开发环境
    win 7,win2008 无法给新建用户完全权限
    基于Ajax的Asp.Net 简易在线聊天室
    phpwind ecshop 用户整合
    UVALive 3942 Remember the Word(字典树+DP)
    UVA 11732 strcmp() Anyone? (压缩版字典树)
    UVA 11992 Fast Matrix Operations(线段树:区间修改)
    hdu 2222 Keywords Search(AC自动机模版题)
    动态规划基础练习笔记
    递归与分治策略基础练习笔记
  • 原文地址:https://www.cnblogs.com/pengyan-9826/p/7674040.html
Copyright © 2020-2023  润新知