黑马程序员技术交流社区

标题: Strust2模型驱动和属性驱动问题??? [打印本页]

作者: 柳小龙    时间: 2013-8-5 23:49
标题: Strust2模型驱动和属性驱动问题???
到底是用属性驱动和是模型驱动,在哪种情况下用那种模式,有经验的大神,请帮小弟分析总结下??
作者: Dej@vu    时间: 2013-8-6 18:04
  1. package org.abu.csdn.action.user;

  2. import com.opensymphony.xwork2.ActionSupport;

  3. /**
  4. * Struts2属性驱动演示用的Action
  5. * @author Yan
  6. *
  7. */
  8. public class RegisterAction extends ActionSupport {
  9.     private String uname;
  10.     private String upass;
  11.     private String rpass;
  12.     public String getUname() {
  13.         return uname;
  14.     }
  15.     public void setUname(String uname) {
  16.         this.uname = uname;
  17.     }
  18.     public String getUpass() {
  19.         return upass;
  20.     }
  21.     public void setUpass(String upass) {
  22.         this.upass = upass;
  23.     }
  24.     public String getRpass() {
  25.         return rpass;
  26.     }
  27.     public void setRpass(String rpass) {
  28.         this.rpass = rpass;
  29.     }  
  30.     @Override
  31.     public String execute() throws Exception {        
  32.         return ActionSupport.SUCCESS;
  33.     }
  34. }
复制代码
1.Struts2的属性驱动.
Struts2的属性驱动指的是在action中JSP页面的每一个form中的name都对应在action中有一个属性与之对应。看下面代码片段:
  1. <form action="register.do" name="RegisterForm" method="post">
  2.             Username:<input type="text" name="uname"><br>
  3.             Password:<input type="password" name="upass"><br>
  4.             Confirm: <input type="password" name="rpass"><br>
  5.             <input type="submit" value="Submit">
  6. </form>
复制代码
这是一个最基本的用户注册的表单,它有三个数据要提交: uname、upass、rpass,那么对应的Action也要有三个属性(其实是三个属性的setter),看register.do实际的Action定义类:
你会看到RegisterAction中的三个属性和RegisterForm表单中的name属性名字一模一样,没错,这就是Struts2的属性驱动,当表单提交到RegisterAction后,Struts2将会自动将根据表单的name属性调用Action中相应的属性setter,去自动赋值。
2.Struts2的模型驱动
Struts2的模型驱动其实和Struts1.x中的ActionForm有点类似,在Struts1.x中每一个Action都必须有一个ActionForm与之对应,而Struts2.0中,每一个Action同样需要提供一个POJO对象,用来封装表单属性,看代码:
  1. <form action="register.do" name="RegisterForm" method="post">

  2.             Username:<input type="text" name="uname"><br>
  3.             Password:<input type="password" name="upass"><br>
  4.             Confirm: <input type="password" name="rpass"><br>
  5.             <input type="submit" value="Submit">

  6. </form>
复制代码
(1)请你统一整个系统中的Action使用的驱动模型,即要么都是用属性驱动,要么都是用模型驱动。
(2)如果你的DB中的持久层的对象与表单中的属性都是一一对应的话,那么就使用模型驱动吧,毕竟看起来代码要整洁得多。
(3)如果表单的属性不是一一对应的话,那么就应该使用属性驱动,否则,你的系统就必须提供两个Bean,一个对应表单提交的数据,另一个用与持久层。
作者: 柳小龙    时间: 2013-8-7 23:54
嗯嗯。谢谢啦!!!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2