﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-zhangliao613-文章分类-struts2</title><link>http://www.blogjava.net/zhangliao613/category/48119.html</link><description /><language>zh-cn</language><lastBuildDate>Mon, 21 Mar 2011 06:14:05 GMT</lastBuildDate><pubDate>Mon, 21 Mar 2011 06:14:05 GMT</pubDate><ttl>60</ttl><item><title>struts2之ModelDriven</title><link>http://www.blogjava.net/zhangliao613/articles/346673.html</link><dc:creator>如果你是我的传说</dc:creator><author>如果你是我的传说</author><pubDate>Mon, 21 Mar 2011 03:45:00 GMT</pubDate><guid>http://www.blogjava.net/zhangliao613/articles/346673.html</guid><wfw:comment>http://www.blogjava.net/zhangliao613/comments/346673.html</wfw:comment><comments>http://www.blogjava.net/zhangliao613/articles/346673.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhangliao613/comments/commentRss/346673.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhangliao613/services/trackbacks/346673.html</trackback:ping><description><![CDATA[<p style="text-indent: 2em">可以根据Action属性的不同将它分为两类：Field-Driven（属性驱动） Action和Model-Driven（模型驱动） Action。 <br />
一、Field-Driven（属性驱动）Action，Action拥有自己的属性，这些属性一般是Java的基本类型。表单字段直接和Action的属性 对应。</p>
<p style="text-indent: 2em">二、实现了modelDriven接口可以在action中直接获得例如User对象，它会将Object getModel()取得的User放到ValueStack中。可以理解为将这个User的属性追加到Action中。它主要是作用是实现类似 Struts的FormBean功能。</p>
<p style="text-indent: 2em">在struts2中，提供了一种直接使用领域对象的方式，就是让action实现com.opensymphony.xwork2.ModelDriven接口，ModelDriven让你可以直接操作应用程序中的领域对象，允许你在web层和业务层使用相同的对象。</p>
<p style="text-indent: 2em">ModelDriven接口只有一个方法</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public Object getModel() {<br />
return null;<br />
}</p>
<p style="text-indent: 2em">该方法返回一个用于接收用户输入数据的对象模型，在这个模型对象中的属性可以直接通过(属性名)userName来访问，而不需要使用（对象名.属 性名）user.userName这种格式来访问了，在action也不需要对对象提供getter和setter方法了，但是必须要在action中进 行new操作</p>
<p style="text-indent: 2em">如下</p>
<p style="text-indent: 2em">//&nbsp;ModelDriven要使用泛型哦</p>
<p style="text-indent: 2em">public class LoginAction extends ActionSupport implements ModelDriven&lt;User&gt;{</p>
<p style="text-indent: 2em">private static final long serialVersionUID = -6434128483294080524L;</p>
<p style="text-indent: 2em">//这里必须要new<br />
private User user=new User();<br />
public String login() throws Exception {<br />
// TODO Auto-generated method stub&nbsp;&nbsp;<br />
return SUCCESS;<br />
}</p>
<p style="text-indent: 2em">//这里是实现接口方法</p>
<p style="text-indent: 2em">@Override<br />
public User getModel() {<br />
// TODO Auto-generated method stub</p>
<p style="text-indent: 2em">//别忘记了，要把返回值写上哦<br />
return user;<br />
}<br />
}</p>
<p style="text-indent: 2em">这样一个ModelDriven就实现完毕了</p>
<p style="text-indent: 2em">和属性驱动的Action有很大的区别，下面一一列举：</p>
<p style="text-indent: 2em">（1）模型驱动的Action必须实现ModelDriven接口，而且要提供相应的泛型，这里当然就是具体使用的Java Bean了。</p>
<p style="text-indent: 2em">（2）实现ModelDriven的getModel方法，其实就是简单的返回泛型的一个对象。</p>
<p style="text-indent: 2em">（3）在Action提供一个泛型的私有对象，这里就是定义一个User的user对象，并提供相应的getter与setter。</p>
<p style="text-indent: 2em">好了，上面的三件事做完之后，Action就会去自动调用User的setter将表单中的name属性的值赋给User中的属性。而Action的后续处理的Jsp页面后者是Servlet就可以使用user对象了。</p>
<p style="text-indent: 2em">到底是用属性驱动和是模型驱动呢？ </p>
<p style="text-indent: 2em">这个问题困扰了很多Struts2的初学者，我这里提供一些建议：</p>
<p style="text-indent: 2em">（1）请你统一整个系统中的Action使用的驱动模型，即要么都是用属性驱动，要么都是用模型驱动。</p>
<p style="text-indent: 2em">（2）如果你的DB中的持久层的对象与表单中的属性都是一一对应的话，那么就使用模型驱动吧，毕竟看起来代码要整洁得多。</p>
<p style="text-indent: 2em">（3）如果表单的属性不是一一对应的话，那么就应该使用属性驱动，否则，你的系统就必须提供两个Bean，一个对应表单提交的数据，另一个用与持久层。</p>
<img src ="http://www.blogjava.net/zhangliao613/aggbug/346673.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhangliao613/" target="_blank">如果你是我的传说</a> 2011-03-21 11:45 <a href="http://www.blogjava.net/zhangliao613/articles/346673.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>