歡迎您光臨本站 註冊首頁

struts2中的mode-driven體驗

←手機掃碼閱讀     火星人 @ 2014-03-10 , reply:0

在很久之前我就體驗(所謂體驗,就是寫一個demo跑跑,算不上學習)過一把struts2.但是我發現雖然struts2相對struts1.x有很大的不同,但是還是沒有解決困擾我的這個問題.就是model就究竟怎麼寫.在一個spring-hibernate-struts的典型項目中,通常會在Hibernate中定義一個pojo實體類做ORM,但是在struts的Action同樣要定義model,不會再把那個實體類再寫一遍,我覺得很難受,我知道可以在Action裡面聲明一個實體類,但是這樣總覺得不是很優雅,因為在我看來,實體類沒有得到很好的復用,我曾經對struts2很冷漠.但是最近了解到struts2裡面有一個Model-Driven,雖然對模型驅動開發了之甚少,但是通過自己做的簡單的代碼,我發現這個世界真的是缺少發現.

這也是第一次用上了maven2,最開始用到maven2是因為他可以管理依賴(dependency),我們只要在maven2的pom.xml 文件中添加一個依賴,maven 就會自動到網上下載struts所依賴的包並設置好classpath.

tip:要使用maven2的eclipse插件m2eclipse必須將eclipse3.4升級到最新的版本,不然會被報錯的,update站點為:http://m2eclipse.sonatype.org/update/

新建完項目之後,在項目的右鍵菜單中 maven2 -> add maven2 management.整個項目的目錄結構都會有變化,注意兩點,添加了maven2支持后,在build path中的source沒有了,需要手動添加文件夾.還有一個問題就是你必須在"Order and export"中將maven dependencies勾上,否則部署tomcat上面的時候會有包缺失.

進入正題:其實model-driven在strtus中的用法沒有什麼特別的地方.就是在定義Action的時候稍有不同.

1 public class UserAction extends ActionSupport implements ModelDriven{
2
3 private static final long serialVersionUID = 6863420763993646296L;

4 private User user=new User();
5
6 public Object getModel() {
7 return user;
8 }
9
10 public String execute() {
11 if(this.user.getAge()==20) this.user.setAge(22);
12 return SUCCESS;
13 }
14 }

其實變化就是在定義Action的時候實現ModelDriven介面實現getModel方法.注意在聲明實體對象的時候需要實例化.但是在jsp頁面上也是有不同的.

1 <s:form action="UserAction" theme="css_xhtml">
2 <s:textfield name="name" label="姓名"></s:textfield>
3 <s:textfield name="age" label="年齡"></s:textfield>
4 <s:submit value="GO"></s:submit>
5 </s:form>

如果按照通常的做法在Action中定義一個User對象,那麼在jsp頁面上文本框的屬性就應該是user.name,user.age.這樣做顯然更加簡單.

結論

使用model-driven的方式能夠將現有的實體類簡單的復用為mvc模型中的model,減少代碼.

疑問:雖然解決了這麼個問題,但是我還是對struts有些不放心,就是tag生成的html,很難獲得dom的id屬性,這樣給javascript的一些邏輯控制帶來了麻煩,這也是我對struts不太放心的地方,不知道大家在這方面是怎麼做的.


[火星人 ] struts2中的mode-driven體驗已經有496次圍觀

http://coctec.com/docs/java/show-post-61714.html