Struts2的模型驱动、属性驱动的理解
  xaeiTka4h8LY 11天前 12 0

因为在struts1的版本中,属性的拦截以及控制的处理是被封装为两个对立的ActionForm、Action来获取HttpServerRequest的参数、控制访问的MAPPING的。而在Struts2中我们可以直接通过Action来获取请求参数,并把处理的资源映射返回给struts.xml指向对应的视图资源或者模型或者控制器进行下一步的处理。发现Action在Struts2中负责了struts1的ActionForm以及Action的双重任务,那么、我们如果习惯了struts1的开放方式的,在Struts中提供,模型驱动的方式来分解Action的任务,这种模式是通过专门的JavaBean来封装请求。

Field-driven方式:直接在Action类中定义各种Java基本类型(包装类型)、String、Date类型的属性,这些属性名和页面表单输入域的名字一一对应。
 
Model-driven方式:通过领域模型JavaBean来进行数据传递。在Action类中定义一个领域模型JavaBean的对象,JavaBean所封装的属性与页面表单输入域的名字一一对应。把页面表单的数据直接封装到这个JavaBean中。

   我们来比较一下:属性驱动和模型驱动的区别

   属性驱动的例子:

public class InputAction extends ActionSupport {
	private static final long serialVersionUID = 7513077180980272234L;
	
	private String str;
	private int inte;
	private double dou;
	private char c;
	private boolean flag;
	private Date date;
	
	public String getStr() {
		return str;
	}
	public void setStr(String str) {
		this.str = str;
	}
	public int getInte() {
		return inte;
	}
	public void setInte(int inte) {
		this.inte = inte;
	}
	public double getDou() {
		return dou;
	}
	public void setDou(double dou) {
		this.dou = dou;
	}
	public char getC() {
		return c;
	}
	public void setC(char c) {
		this.c = c;
	}
	public boolean isFlag() {
		return flag;
	}
	public void setFlag(boolean flag) {
		this.flag = flag;
	}
	public Date getDate() {
		return date;
	}
	public void setDate(Date date) {
		this.date = date;
	}
	
	public String execute(){
		System.out.println(str);
		System.out.println(inte);
		System.out.println(dou);
		System.out.println(c);
		System.out.println(flag);
		System.out.println(date);
		return "succ";
	}
}
   模型驱动例子:
public class ModelDriverAction {
	private Account acc;
	public Account getAcc() {
		return acc;
	}
	public void setAcc(Account acc) {
		this.acc = acc;
	}		
	public String execute(){
		System.out.println(acc);		
		return "succ";
	}
}

      其实,模型驱动必须实现ModelDriver接口,以及必须实现getMode()方法,该方法把Action和以及对应的Model实例关联。配置属性驱动和模型驱动的方式一样,在struts.xml文件中配置对应的Action即可,那他怎么实现的?

    那么,我们要看到Struts2是一个拦截器为核心的框架,在struts_default.xml文件里面可以发现对应的拦截器的设置。

   而我们在属性驱动模型下在JSP中访问属性时:

   <s:property value="str">

  而在模型驱动模型下在JSP中访问属性时:

  <s:property value ="acc.no">

    但是,Struts2会自动识别使用何种驱动模式,省略model.系统自动会关联到model.username的属性值。

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 11天前 0

暂无评论

推荐阅读
  lcYh0pvD0OAe   2023年11月02日   51   0   0 StringDelphivb开发工具C
xaeiTka4h8LY