Struts2 - 屬性驅動與模型驅動

 

Struts2 - 屬性驅動與模型驅動java

 

1、爲何要使用屬性驅動和模型驅動?dom

         :struts2與struts很大的不一樣點在於,struts的execute方法提供了HttpServletRequest和  jsp

    HttpServletResponse方法在獲取客戶端提交的數據信息的時候須要使用HttpServletRequest的ide

    getParameter()方法,而且還須要進行必要的數據類型轉換。如何客戶端提交的數據量大的時候,咱們則post

    須要寫不少的getParameter方法。這樣代碼量就相應的增長很多。可是struts2爲咱們提供了屬性驅動和模this

    型驅動,它不須要咱們寫不少的獲取值的方法。而只須要咱們在Action中定義相應的getter方法,在界面上以spa

    Action中的變量名做爲表單元素的name屬性值便可。orm

2、屬性驅動和模型驅動有什麼異同?xml

 1.屬性驅動對象

:對於屬性驅動,咱們須要在Action中定義與表單元素對應的全部的屬性,於是在Action中會出現不少的

getter和setter方法

 2.模型驅動

:對於模型驅動,使用的Action對象須要實現ModelDriven接口並給定所須要的類型.而在Action中咱們只需

要定義一個封裝全部數據信息的javabean

 3.屬性和模型驅動的相同點

:當咱們使用屬性驅動和模型驅動的時候,必須將表單的元素中的name屬性值與咱們定義接收數據信息的變量

 名對應起來。

 

 

3、如何使用屬性驅動?

:對於屬性驅動的實現是很是簡單的 ,實例以下:

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>  

              

//其餘配置信息,相同  

  4、模型驅動:模型驅動有三點不一樣

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> 

相關文章
相關標籤/搜索