博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Struts2 - 属性驱动与模型驱动
阅读量:6226 次
发布时间:2019-06-21

本文共 3731 字,大约阅读时间需要 12 分钟。

hot3.png

 

Struts2 - 属性驱动与模型驱动

 

一、为什么要使用属性驱动和模型驱动?

         :struts2与struts很大的不同点在于,struts的execute方法提供了HttpServletRequest和  

    HttpServletResponse方法在获取客户端提交的数据信息的时候需要使用HttpServletRequest的

    getParameter()方法,并且还需要进行必要的数据类型转换。如何客户端提交的数据量大的时候,我们则

    需要写很多的getParameter方法。这样代码量就相应的增加不少。但是struts2为我们提供了属性驱动和模

    型驱动,它不需要我们写很多的获取值的方法。而只需要我们在Action中定义相应的getter方法,在界面上以

    Action中的变量名作为表单元素的name属性值即可。

二、属性驱动和模型驱动有什么异同?

 1.属性驱动

:对于属性驱动,我们需要在Action中定义与表单元素对应的所有的属性,因而在Action中会出现很多的

getter和setter方法

 2.模型驱动

:对于模型驱动,使用的Action对象需要实现ModelDriven接口并给定所需要的类型.而在Action中我们只需

要定义一个封装所有数据信息的javabean

 3.属性和模型驱动的相同点

:当我们使用属性驱动和模型驱动的时候,必须将表单的元素中的name属性值与我们定义接收数据信息的变量

 名对应起来。

 

 

三、如何使用属性驱动?

:对于属性驱动的实现是非常简单的 ,实例如下:

action

Java代码  

 package org.viancent.action;  

        import java.util.Date;  

    import com.opensymphony.xwork2.ActionSupport;  

  

    public class GetFieldAction extends ActionSupport {  

            private String pname;  

            private String address;  

            private int age;  

            private Date date;  

  

            public String getPname() {  

                return pname;  

            }  

  

            public void setPname(String pname) {  

                this.pname = pname;  

            }  

  

            public String getAddress() {  

                return address;  

            }  

                  

                    public void setAddress(String address) {  

                this.address = address;  

            }  

  

            public int getAge() {  

                return age;  

            }  

  

            public void setAge(int age) {  

                this.age = age;  

            }  

  

            public Date getDate() {  

                return date;  

            }  

  

            public void setDate(Date date) {  

                this.date = date;  

            }  

                      

            @Override  

            public String execute() throws Exception {  

                return SUCCESS;  

                      }  

}  

 

Java代码  

JSP:(register.jsp)  

    <div>  

    <form action="/struts2/register.action" method="post">  

        <table width="80%" align="center">  

    <tr>  

        <td>UserName:</td>  

        <td><input type="text" name="pname" id="pname"/>       </td>  

    </tr>  

    <tr>  

        <td>PassWord:</td>  

        <td><input type="text" name="address" id="address"/></td>  

    </tr>  

    <tr>  

        <td>Age:</td>  

        <td><input type="text" name="age" id="age"/></td>  

    </tr>  

    <tr>  

        <td>Date</td>  

        <td><input type="text" name="date" id="date"/></td>  

    </tr>  

    <tr>  

        <td colspan="2"><input type="submit" value="submit"/></td>  

    </tr>  

    </table>  

</form>  

</div>  

              

//其他配置信息,相同  

  四、模型驱动:模型驱动有三点不同

1.所属的Action需要实现ModelDriven接口,并且给定类型和实现接口中的getModel方法

2.需要一个封装所有属性的javabean(对应 1.中的给给定类型)

3.在struts.xml文件中描述此Action的地方让该Action实现一个拦截器 (ModelDrivenInterceptor)

:具体实例如下:

Java代码  

JavaBean(person)  

package org.viancent.domain;  

import java.util.Date;  

public class Person {  

        private String pname;  

        private int page;  

        private String address;  

        private Date date;  

  

    public Date getDate() {  

            return date;  

    }  

  

    public void setDate(Date date) {  

            this.date = date;  

    }  

  

    public String getPname() {  

            return pname;  

    }  

  

    public void setPname(String pname) {  

            this.pname = pname;  

    }  

  

    public int getPage() {  

            return page;  

    }  

  

    public void setPage(int page) {  

            this.page = page;  

    }  

  

    public String getAddress() {  

            return address;  

    }  

  

    public void setAddress(String address) {  

            this.address = address;  

    }  

}  

 

Action:(RegisterAction)

Java代码  

package org.viancent.action;  

import org.viancent.domain.Person;  

import com.opensymphony.xwork2.ActionSupport;  

import com.opensymphony.xwork2.ModelDriven;  

  

public class RegisterAction extends ActionSupport implements  

ModelDriven<Person/*这里需要填写Person对象*/> {  

                  

    private Person person =  new Person();   

              //定义Person对象用于承载getModel()方法返回的数据信息  

       //同时这里必须实例化对象,否则person的对象会为空  

                  

    public Person getPerson() {   

               //实现person的getter方法,用于当请求转发后,其他界面数据访问  

            return person;  

    }  

  

    @Override  

    public Person getModel() {  

              //重写ModleDriven的方法,返回定义的person对象  

            return person;  

    }  

  

    @Override  

    public String execute() throws Exception {   

              //实现跳转            

             System.out.println(person.getPage()+""+person.getDate());  

                 return SUCCESS;  

        }  

}  

 struts.xml:

Java代码  

<action name="register"class="org.viancent.action.RegisterAction">  

    <result name="success">/result.jsp</result>  

        <result name="input">/show.jsp</result>  

        <interceptor-ref name="modelDriven"></interceptor-ref>  

                 //实现模型驱动的拦截器  

        <interceptor-ref name="defaultStack"></interceptor-ref>  

</action> 

 

 

转载于:https://my.oschina.net/yangcaoling/blog/222785

你可能感兴趣的文章
zabbix服务端安装(LNMP)
查看>>
Nginx 反向代理缓存效果测试
查看>>
centos 零碎学习小记 6.
查看>>
手机视频技术
查看>>
每到星期一就很没有精神
查看>>
Windows Server 2012 RDS系列:桌面虚拟化(4)
查看>>
分割超大Redis数据库例子
查看>>
apue.h源代码
查看>>
C#更改系统时间
查看>>
关于空指针NULL、野指针、通用指针
查看>>
云计算的价值
查看>>
如何选择嵌入式软件开发平台
查看>>
创建可扩展性系统-8-1
查看>>
android的第一个小程序,调用相机拍照,访问网络图片
查看>>
spark2.x由浅入深深到底系列六之RDD java api用JdbcRDD读取关系型数据库
查看>>
好未来谢华亮:AI 在教育行业中的应用
查看>>
10种排序算法总结
查看>>
Wi-Fi WPS种类
查看>>
Linux逻辑卷管理LVM学习总结备忘
查看>>
用户配置文件的类型
查看>>