Webwork2+Spring+Hibernate體驗

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

          創(chuàng)建/修改/刪除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模式下會自動執(zhí)行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

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


          網站導航:
           

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

          Copyright © 我的JAVA

          主站蜘蛛池模板: 定结县| 建阳市| 千阳县| 东台市| 溧水县| 吕梁市| 安新县| 鲁山县| 天水市| 永修县| 米林县| 自治县| 大竹县| 柘城县| 镇巴县| 堆龙德庆县| 新巴尔虎左旗| 海盐县| 浑源县| 兰州市| 夏津县| 苍南县| 天津市| 澄迈县| 和林格尔县| 奉贤区| 武山县| 绥化市| 琼结县| 北安市| 万宁市| 大名县| 句容市| 会宁县| 南宫市| 土默特右旗| 栖霞市| 开阳县| 日土县| 云龙县| 张家口市|