Webwork2+Spring+Hibernate體驗

          Posted on 2005-08-29 11:03 我的JAVA 閱讀(1027) 評論(2)  編輯  收藏
          嘿嘿,偶來介紹下Webwork2結合Spring, Hibernate,Default認為對Spring,Hibernate有一定了解。
          從User說起,包括創建/修改/刪除User,以及對User的列表,先看Webwork2的Action代碼
          為簡單說明問題,不考慮什么Interceptor, Duplicated Submit, Validation,等問題

          創建/修改/刪除User:UserAction.java相關代碼

          java代碼: 

          UserManager userManager;

          public void setUserManager(UserManager) {
              this.userManager = userManager;
          }

          public String create() {
              userManager.create(getUser());
          }

          public String modify() {
              userManager.modify(modifyUser())
              return "success";
          }

          public String remove() {
              userManager.remove(getUser())
              return "success";
          }



          xwork.xml相關代碼
          java代碼: 

          <action name="user" class="com.caryo.user.actions.UserAction">
              <external-ref name="userManager">userManager</external-ref>
              <result name="success" type="dispatcher">user.jsp</result>
          </action>



          webwork action會自動接受頁面上傳過來的信息,而且還支持JavaBean的BeanInfo(BeanInfo沒用過,偶
          都是直接在action中完成獲取屬性,以及類型轉換與校驗的工作的)
          Webwork2很方便的支持了Command模式,允許一個Action擁有多個Command,對應的url調用
          user!create.action, user!modify.action, user!remove.action,會對應的調用UserAction中的方法,
          然后根據方法返回值去尋找對應的View,return "sucess" 就會forward到user.jsp。
          其中的userManager是Spring中applicationContext中定義的bean

          java代碼: 

          <bean id="userManager" class="com.caryo.user.DefaultUserManager">
              <property name="userDAO"><ref local="userDAO"/></property>
          </bean>



          對User的列表:ListUserAction.java相關片斷

          java代碼: 

          UserManager userManager;

          public void setUserManager(UserManager) {
              this.userManager = userManager;
          }
          // userManager的獲取可放在一個User的根類聲明,如AbstractUserAction,這里重復為了看得清楚些

          public List getAllUsers() {
              userManager.getAllUsers();
          }

          public List getOnlineUsers() {
              userManager.getOnlineUsers();
          }



          xwork.xml相關代碼
          java代碼: 

          <action name="listuser" class="com.caryo.user.actions.ListUserAction">
              <external-ref name="userManager">userManager</external-ref>
              <result name="success" type="dispatcher">listuser.jsp</result>
          </action>



          這樣對應的url就是listuser.action,無command模式下會自動執行public String execute()這一方法,
          Default是一個返回"success"的空方法,當然你也可以重寫此方法,例如做校驗等等。

          listuser.jsp中使用webwork taglib打出User列表的片斷
          java代碼: 

          <ww:iteraor value="allUsers">
          userId: <ww:property value="id" />
          userName: <ww:property value="name" />
          </ww:iterator>

          <ww:iteraor value="onlineUsers">
          userId: <ww:property value="id" />
          userName: <ww:property value="name" />
          </ww:iterator>



          webwork taglib功能比較強大,其中還可使用帶參數的方法調用,而且在邏輯控制等方面都考慮的比較完善
          詳細參見 http://wiki.opensymphony.com/pages/viewpage.action?pageId=1876
          只要設計合理,基本上使用其taglib就可以控制整個view,包括復雜的頁面。盡管也支持Velocity, Freemarker等
          不過考慮到性能,推薦還是使用jsp view。
          大型網站的UI層應該盡可能的薄,JSP不易維護,我覺得taglib是可接受的厚度的上限了。

          Spring+hibernate的部分跟dhj1版主的相近,http://forum.javaeye.com/viewtopic.php?t=7925
          偶就不重復了。只說一些不同的地方
          1. web.xml 可以使用listener來初始化基本信息而不是用servlet
          2. 在Session in DAO中,用iterator返回數據應該是不行的,那么要獲取count,不是iterator.next()
          也不是獲取整個list,然后list.size(),而應是一個list.get(0);
          3. 可將HQL放到對應的hbm.xml中
          java代碼: 

          public class HibernateVehicleDAO extends CaryoHibernateObjectDAO implements VehicleDAO {
             
                  Class vehicleClass;

                  public Class getPersistentClass() {
                          return vehicleClass != null ? vehicleClass : (vehicleClass = Vehicle.class);
                  }
                 
                  public Vehicle getById(final long id) {
                  return (Vehicle) getByClassId(id);
                  }

                  public List findAllGlobalVehicles() {
                          return findNamedQuery("caryo.vehicle_findAllGlobalVehicles");
                  }
          }



          vehicle.hbm.xml相關代碼
          java代碼: 

          <query name="caryo.vehicle_findAllGlobalVehicles"><![CDATA[
              from Vehicle vehicle
          ]]></query>

          Feedback

          # re: Webwork2+Spring+Hibernate體驗  回復  更多評論   

          2005-11-29 08:24 by 小寶
          大哥,你涉獵面還挺廣的么!呵呵
          struts,jsf,webwork都上了?^_^!!!

          # re: Webwork2+Spring+Hibernate體驗  回復  更多評論   

          2007-04-06 14:48 by xinxin
          好像要一個包吧 webwork2-spring.jar 我都下載好幾天了都沒下載到 哪位高手給我傳一個 不勝感激 我的郵箱 mylovexin_51211@163.com

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           

          posts - 10, comments - 9, trackbacks - 0, articles - 0

          Copyright © 我的JAVA

          主站蜘蛛池模板: 确山县| 浑源县| 洛扎县| 沁水县| 巴里| 依兰县| 台中市| 敦化市| 徐州市| 成武县| 油尖旺区| 韶山市| 保定市| 玉树县| 永修县| 徐闻县| 巫山县| 潢川县| 涡阳县| 武平县| 塔城市| 阜康市| 黄冈市| 日照市| 北宁市| 东城区| 武胜县| 青田县| 简阳市| 西华县| 丰城市| 漳州市| 岳池县| 仲巴县| 大埔区| 来安县| 柳林县| 长子县| 遵义市| 阜新市| 镇宁|