Struts2 - 属性驱动与模型驱动

来源:互联网 发布:淘宝买电动车可靠吗 编辑:程序博客网 时间:2024/05/19 20:40

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代码 复制代码 收藏代码
  1. package org.viancent.action;
  2. import java.util.Date;
  3. import com.opensymphony.xwork2.ActionSupport;
  4. public class GetFieldActionextends ActionSupport {
  5. private String pname;
  6. private String address;
  7. private int age;
  8. private Date date;
  9. public String getPname() {
  10. return pname;
  11. }
  12. public void setPname(String pname) {
  13. this.pname = pname;
  14. }
  15. public String getAddress() {
  16. return address;
  17. }
  18. public void setAddress(String address) {
  19. this.address = address;
  20. }
  21. public int getAge() {
  22. return age;
  23. }
  24. public void setAge(int age) {
  25. this.age = age;
  26. }
  27. public Date getDate() {
  28. return date;
  29. }
  30. public void setDate(Date date) {
  31. this.date = date;
  32. }
  33. @Override
  34. public String execute() throws Exception {
  35. return SUCCESS;
  36. }
  37. }

Java代码 复制代码 收藏代码
  1. JSP:(register.jsp)
  2. <div>
  3. <form action="/struts2/register.action" method="post">
  4. <table width="80%" align="center">
  5. <tr>
  6. <td>UserName:</td>
  7. <td><input type="text" name="pname" id="pname"/> </td>
  8. </tr>
  9. <tr>
  10. <td>PassWord:</td>
  11. <td><input type="text" name="address" id="address"/></td>
  12. </tr>
  13. <tr>
  14. <td>Age:</td>
  15. <td><input type="text" name="age" id="age"/></td>
  16. </tr>
  17. <tr>
  18. <td>Date</td>
  19. <td><input type="text" name="date" id="date"/></td>
  20. </tr>
  21. <tr>
  22. <td colspan="2"><input type="submit" value="submit"/></td>
  23. </tr>
  24. </table>
  25. </form>
  26. </div>
  27. //其他配置信息,相同

四、模型驱动

:模型驱动有三点不同

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

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

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

:具体实例如下:

Java代码 复制代码 收藏代码
  1. JavaBean(person)
  2. package org.viancent.domain;
  3. import java.util.Date;
  4. public class Person {
  5. private String pname;
  6. private int page;
  7. private String address;
  8. private Date date;
  9. public Date getDate() {
  10. return date;
  11. }
  12. public void setDate(Date date) {
  13. this.date = date;
  14. }
  15. public String getPname() {
  16. return pname;
  17. }
  18. public void setPname(String pname) {
  19. this.pname = pname;
  20. }
  21. public int getPage() {
  22. return page;
  23. }
  24. public void setPage(int page) {
  25. this.page = page;
  26. }
  27. public String getAddress() {
  28. return address;
  29. }
  30. public void setAddress(String address) {
  31. this.address = address;
  32. }
  33. }

Action:(RegisterAction)

Java代码 复制代码 收藏代码
  1. package org.viancent.action;
  2. import org.viancent.domain.Person;
  3. import com.opensymphony.xwork2.ActionSupport;
  4. import com.opensymphony.xwork2.ModelDriven;
  5. public class RegisterActionextends ActionSupport implements
  6. ModelDriven<Person/*这里需要填写Person对象*/> {
  7. private Person person = new Person();
  8. //定义Person对象用于承载getModel()方法返回的数据信息
  9. //同时这里必须实例化对象,否则person的对象会为空
  10. public Person getPerson() {
  11. //实现person的getter方法,用于当请求转发后,其他界面数据访问
  12. return person;
  13. }
  14. @Override
  15. public Person getModel() {
  16. //重写ModleDriven的方法,返回定义的person对象
  17. return person;
  18. }
  19. @Override
  20. public String execute() throws Exception {
  21. //实现跳转
  22. System.out.println(person.getPage()+""+person.getDate());
  23. return SUCCESS;
  24. }
  25. }

struts.xml:

Java代码 复制代码 收藏代码
  1. <action name="register"class="org.viancent.action.RegisterAction">
  2. <result name="success">/result.jsp</result>
  3. <result name="input">/show.jsp</result>
  4. <interceptor-ref name="modelDriven"></interceptor-ref>
  5. //实现模型驱动的拦截器
  6. <interceptor-ref name="defaultStack"></interceptor-ref>
  7. </action>

JSP(register.jsp)

如上:属性驱动的JSP界面
0 0
原创粉丝点击