<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-67  評論-522  文章-0  trackbacks-0
        這是本系列的最后一章,大象對示例進行適當的擴充并說明。
        其實到第四篇,對于示例的說明就已經全部講完了,如果按照這樣的例子,很難有什么值得學習的地方。大象本著寫點有用東西的原則,在這章,對示例進行一下適當的擴充并說明。
        第五部分:擴展框架
        paramsPrepareParamsStack攔截器棧
        paramsPrepareParamsStack這個攔截器棧是在struts2-default.xml中定義的,里面包含了很多個攔截器,最重要的是這三個:paramspreparemodelDriven。我們只要記住這樣幾點。
        params:它負責將請求參數值設置到Action中與之同名的屬性中。
        prepare:當Action實現了Preparable接口時,這個攔截器就會調用prepare()方法。如果你有想在execute()方法之前執行的邏輯處理,它就可以幫你完成這個功能。
        modelDriven:如果Action實現了ModelDriven接口,這個攔截器就會把getModel()方法中的返回結果壓入值棧。這就意味著,可以在結果頁面上直接使用model對象的屬性。
        它的執行順序是這樣的
        首先,params攔截器會給action中的相關參數賦值,如idusernamepassword等等。
        然后,prepare攔截器執行prepare()方法,prepare()會根據參數,如id,去調用相關的方法,設置model對象。當然,實現的這個接口方法由你自己來定義,不局限只設置model之類的功能。
        接著,modelDriven攔截器會將model對象壓入值棧,因為它是把getModel()方法中的返回結果放到值棧中,而這個方法的返回類型是個泛型參數,在實現ModelDriven接口的時候,可以給它指定一個具體的對象類型,因此返回類型也將是這個指定的對象類型,如ModelDriven<User>
        最后,params攔截器會將參數再賦值給model對象。
        思考修改與保存這兩種動作。當點擊人員修改時,請求為:user!input.action?id=1params攔截器會將id參數值設置到Action中的id屬性,請一定注意,id屬性要有set()方法,然后prepare攔截器開始在prepare()方法中,根據這個id值取得User對象,接著modelDriven會調用getModel()方法,此時,方法中返回的是user對象,所以會把user加入到值棧中,最后再執行一次params攔截器,但這時沒有其它的參數值需要賦值給user對象,所以程序會接著往下走,這里假定沒有其它的業務邏輯,執行返回,字符串為input,根據前面講的插件知識,結果頁面為user-input.jsp,那么就跳轉到修改頁面了,而且頁面中表單域將顯示數據庫中的值。如果理解了修改,那么保存也就清楚了。
        prepare()方法雖然不錯,但是也有弊端,那就是它會對Action中的每個方法都進行攔截,不管你是執行execute還是input,還是其它的自定義方法,它都會對其攔截,這當然不是我們所希望的。那有沒有更好的方式?答案是肯定的,請接著往下看。
        prepareMethedName
        使用prepare攔截器的另一種形式,在prepare名稱后面加上需要攔截的方法名。比如,你要攔截input方法,可以寫成prepareInput,需要攔截save方法,就寫上prepareSave。采取這樣的方式后,將會在執行這些方法之前時,才對它們進行攔截。
        例如,請求role!input.action,會執行RoleAction中的input方法,如果我們設置了prepareInput方法,則會先進入此方法執行,執行完后再回到input方法往下執行。
        請注意,在使用這種方式時,Preparable接口定義的prepare()方法體內不要含有任何代碼,就是說給這個方法一個空實現。這樣,它就什么都不做,所有的攔截處理就全部交由相應的prepareMethedName來完成。
        
        
        它們在每個對應的方法之前執行。prepareEntity就是來初始化實體對象,然后由modelDriven攔截器將getModel()方法中的返回結果放入值棧,當返回頁面時,就可以直接取值了。
        StrutsAction
        重新定義一個基類,里面封裝大部分的通用操作,主要依靠泛型來實現,將hibernateDao注解進來,通過繼承這個基類進行基本的CRUD操作。本文末尾提供示例源碼下載,里面有詳細的注釋,這里我只貼出部分重要代碼進行說明,為了行文需要,有些注釋去掉了,但源碼里面都有,請大家放心。
        
        通過擴展ActionSupport,使用泛型參數,構造函數根據反射得到T的具體類型。
        
        這就是默認的執行方法,基本的操作,在這個超類里面都進行了定義,每個方法里面設置的以do開頭的方法,是方便讓子類進行覆蓋,當基本的業務邏輯無法滿足我們的需求時,就可以在子類重寫這些方法。
        
        方法有默認實現,主要是列表顯示,保存和刪除,新增和修改已經有getModel()方法取得實體,在頁面上使用s標簽就可以直接取值,除非有特殊的業務需求,否則不用覆蓋doInputEntity()doViewEntity()方法。請注意,當需要實現自己的邏輯時,只需要覆蓋上面定義的這些方法,而不用重寫executeinput之類。
        我對HibernateDao又進行了適當的擴展與修改,提供了更多的基本封裝方法,不過大家還可以繼續添加。里面都有詳細的注釋,這里就不在贅述了。
        功能擴展
        我對例子做了兩個功能,一個是角色表的增加、修改、刪除、查看,另一個就是用戶表的查詢。可以從源碼中看到,我在RoleAction中沒有寫一行關于增刪改查的代碼,因為它屬于基本操作,超類中已經封裝好了,所以這部分的代碼都省了。對于用戶表的查詢,我覆蓋了doListEntity()方法,在業務層進行條件封裝,執行查詢,返回結果。
        
        這個list就是在超類中定義的,因為默認實現中也用到了list,另外list有一個get方法,用于在頁面中顯示。如果不想采取方式取得list集合,就重寫doListEntity()方法。這里說明下,我是沒有加分頁功能的,大家可以按自己的方式添加分頁查詢。
        在用戶查詢方法中,我使用的是QBC對象查詢,因為這種方式很簡潔,不過我在HibernateDao中也寫了HQLSQL方式的查詢方法,并進行了封裝,可以很方便的調用。
        
        
        這個queryResult方法的定義,你可以改為傳遞用戶名與角色ID的參數,大象在這里就是為了方便,直接使用Request請求。這里userDao調用的query方法是在HibernateDao里面封裝的,因為繼承了HibernateDao,就直接在Service層拿來用了。至于具體的,可以去看源碼。
        頁面部分沒有進行大的調整,主要是將role-list.jsp重命名為role.jsp,因為使用的是超類的默認實現。添加了role-input.jsprole-view.jsp兩個文件,并在user.jsp中,加入了查詢條件。這些代碼都很簡單就不再貼了,而且前一篇也貼過一部分。
        對于這個例子的完整講解說明就到此結束了。大象還想補充說明一下,這個例子只適用于學習,不適合商用,想在實際項目中運用,還需要對框架做大量的改造工作。本系列只是基于SSH2入門學習之用,源碼中不含jar包,下圖是本例中所需的最少jar文件,大家只要下載了springstrutshibernate三個完整壓縮包,那么這些jar基本上都包含了。
        
        發布并啟動Tomcat,然后輸入訪問地址:http://localhost:8080/ssh2 運行該示例,看看效果。
        源碼下載: ssh2  ssh2-maven 
        本文為菠蘿大象原創,如要轉載請注明出處。http://m.tkk7.com/bolo
    posted on 2010-05-30 13:34 菠蘿大象 閱讀(17034) 評論(69)  編輯  收藏 所屬分類: Struts2

    評論:
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2010-05-30 22:13 | ybj316
    你好!能否把要用到的包壓縮一下提供下載?運行tomcat時報錯!
    2010-05-30 22:10:10,000 ERROR [org.springframework.web.context.ContextLoader] - <Context initialization failed>
    org.springframework.beans.factory.BeanDefinitionStoreException: Unexpected exception parsing XML document from file [D:\Tomcat 5.5\webapps\ssh2\WEB-INF\classes\applicationContext.xml]; nested exception is java.lang.NoClassDefFoundError: org/aspectj/weaver/reflect/ReflectionWorld$ReflectionWorldException
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:420)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:342)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:310)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:143)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:178)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:149)  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2010-05-31 08:45 | 菠蘿大象
    @ybj316
    你的版本是什么?這個錯誤是沒有Aspectj的jar包,你應該用了struts2.1.8.1吧,Aspectj在spring里面有,另外我博客里面空間快滿了,沒法上傳這些jar  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2010-08-06 17:07 | tt
    很好的設計思想,我看了兩天大概還只是大概看懂,充分的利用泛型 繼承 多態,代碼簡潔明了!沒這個文字介紹 真的看不懂。主要是struts2 annotation 的資料太少了!我想把這個思路充分利用到工作中,想在實際項目中運用。不知道為什么你說只能做學習用?  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2010-08-06 17:09 | tt
    沒jar包的 找我!qq:87513277   回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2010-08-08 21:24 | 菠蘿大象
    @tt
    原因就是這個框架太簡單了,比如沒有登錄攔截器,AOP切面,自定義標簽,分頁功能,監聽器,模板,等等等等。。。。總之可以擴充的東西還有很多很多,我這樣寫,是方便大家學習。在你們理解后,就可以自己來擴展這個框架,也可以按自己的理解自己建框架。  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五)[未登錄] 2010-08-20 13:38 | 阿飛
    按照你的例子(只改了數據庫連接)用TOMCAT運行起來沒有錯誤,但是訪問時候都出現404錯誤(在HelloAction中打印語句,發現根本沒有調用HelloAction),請問時什么原因。  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2010-08-21 20:49 | 菠蘿大象
    @阿飛
    這位童鞋,例子是沒問題滴,你是否都按我說的做過呢?  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五)[未登錄] 2010-08-31 09:18 | kang
    之前通過配置文件來進行 注入的時候,都是需要通過接口來進行注入的
    請問為什么現在沒有注入接口,而是直接注入了實現類,那既然可以直接調用實現類,為什么還需要注入,我直接調用就的了。。。。

    初學者,不解之,望告之!  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2010-08-31 09:33 | 菠蘿大象
    @kang
    這位童鞋,是這樣的,因為我采用的是注解方式,<context:component-scan base-package="com.bolo.examples" />就會掃描指定的包及子包下全部有@Service,@Repository注解的類,將它們加入到spring容器中來,供程序調用,同時又因為我沒用接口而直接使用類所以在處理事務的時候就要用到cglib代理方式,請注意<aop:config proxy-target-class="true">這句話,這個proxy-target-class默認是為false的,默認為接口。請你看下第二篇的配置文件說明。  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2010-08-31 11:13 |
    大象,可以加我MSN嗎?
    想咨詢你一些問題。
    謝謝:kzkking@live.cn  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2010-08-31 11:21 | 菠蘿大象
    @坤
    不好意思啊,我從來不用MSN,只用QQ  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五)[未登錄] 2010-08-31 11:33 | kang
    @菠蘿大象
    大象,那我如果想使用接口來進行注入

    除了修改 <aop:config proxy-target-class="false"> 外 還需要修改哪些呢?  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五)[未登錄] 2010-08-31 11:34 |
    @菠蘿大象
    那加我QQ吧
    262735260 謝謝了!  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2010-09-02 16:08 | Terry Wang
    讀完了這一系列文章,看得出大象真的是用心在寫作,精神可嘉,博文不錯,博主加油,大象加油!  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2010-09-02 16:18 | 菠蘿大象
    @Terry Wang
    謝謝支持,我會更努力的!  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2010-09-06 10:48 | 迷途的羔羊
    2010-09-06 10:45:19,777 WARN [org.springframework.aop.framework.Cglib2AopProxy] - <Unable to proxy method [public final void org.springframework.orm.hibernate3.support.HibernateDaoSupport.setSessionFactory(org.hibernate.SessionFactory)] because it is final: All calls to this method via a proxy will be routed directly to the proxy.>
    2010-09-06 10:45:19,777 WARN [org.springframework.aop.framework.Cglib2AopProxy] - <Unable to proxy method [public final org.hibernate.SessionFactory org.springframework.orm.hibernate3.support.HibernateDaoSupport.getSessionFactory()] because it is final: All calls to this method via a proxy will be routed directly to the proxy.>
    2010-09-06 10:45:19,777 WARN [org.springframework.aop.framework.Cglib2AopProxy] - <Unable to proxy method [public final void org.springframework.orm.hibernate3.support.HibernateDaoSupport.setHibernateTemplate(org.springframework.orm.hibernate3.HibernateTemplate)] because it is final: All calls to this method via a proxy will be routed directly to the proxy.>
    2010-09-06 10:45:19,777 WARN [org.springframework.aop.framework.Cglib2AopProxy] - <Unable to proxy method [public final org.springframework.orm.hibernate3.HibernateTemplate org.springframework.orm.hibernate3.support.HibernateDaoSupport.getHibernateTemplate()] because it is final: All calls to this method via a proxy will be routed directly to the proxy.>
    2010-09-06 10:45:19,777 WARN [org.springframework.aop.framework.Cglib2AopProxy] - <Unable to proxy method [public final void org.springframework.dao.support.DaoSupport.afterPropertiesSet() throws java.lang.IllegalArgumentException,org.springframework.beans.factory.BeanInitializationException] because it is final: All calls to this method via a proxy will be routed directly to the proxy.>
    2010-09-06 10:45:19,949 WARN [org.springframework.aop.framework.Cglib2AopProxy] - <Unable to proxy method [public final void org.springframework.orm.hibernate3.support.HibernateDaoSupport.setSessionFactory(org.hibernate.SessionFactory)] because it is final: All calls to this method via a proxy will be routed directly to the proxy.>
    2010-09-06 10:45:19,949 WARN [org.springframework.aop.framework.Cglib2AopProxy] - <Unable to proxy method [public final org.hibernate.SessionFactory org.springframework.orm.hibernate3.support.HibernateDaoSupport.getSessionFactory()] because it is final: All calls to this method via a proxy will be routed directly to the proxy.>
    2010-09-06 10:45:19,949 WARN [org.springframework.aop.framework.Cglib2AopProxy] - <Unable to proxy method [public final void org.springframework.orm.hibernate3.support.HibernateDaoSupport.setHibernateTemplate(org.springframework.orm.hibernate3.HibernateTemplate)] because it is final: All calls to this method via a proxy will be routed directly to the proxy.>
    2010-09-06 10:45:19,949 WARN [org.springframework.aop.framework.Cglib2AopProxy] - <Unable to proxy method [public final org.springframework.orm.hibernate3.HibernateTemplate org.springframework.orm.hibernate3.support.HibernateDaoSupport.getHibernateTemplate()] because it is final: All calls to this method via a proxy will be routed directly to the proxy.>
    2010-09-06 10:45:19,949 WARN [org.springframework.aop.framework.Cglib2AopProxy] - <Unable to proxy method [public final void org.springframework.dao.support.DaoSupport.afterPropertiesSet() throws java.lang.IllegalArgumentException,org.springframework.beans.factory.BeanInitializationException] because it is final: All calls to this method via a proxy will be routed directly to the proxy.>
    出了一堆警告,什么數據也沒從數據庫查詢出來,這是什么原因啊?  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2010-09-06 10:54 | 菠蘿大象
    @迷途的羔羊
    這位童鞋,你確定都是按我說的做的嗎?你將示例下載后運行了沒有?你看最后一行有異常出現了,你沒有加入事務控制。  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2010-09-06 16:00 | 迷途的羔羊
    @菠蘿大象
    我運行了你的代碼,也是同樣的警告,但是能查詢,打開show_sql,可以看到你的代碼會打印出sql,我的不會打印sql,也就沒有結果了,這是怎么回事啊?  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2010-09-06 16:09 | 菠蘿大象
    @迷途的羔羊
    你的代碼是自己寫的還是在我的基礎上改的?如果你想自己寫,請一定要完全理解后再做。  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2010-09-06 17:18 | 迷途的羔羊
    @菠蘿大象
    呃,找到原因了,實體類的配置映射目錄沒有要比實際的包路徑少一層,好莫名的原因啊  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2010-09-06 19:32 | 菠蘿大象
    @迷途的羔羊
    我在第二篇配置文件詳解中就講過,請注意這個路徑的寫法,如果寫的不對,是不會映射實體的。  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2010-10-08 16:04 | 窩窩影視
    基本理解了 ,真是個細心的人啊  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2010-10-20 18:05 | yiyicun
    很好 對于初學者很合適···  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2010-12-03 16:43 | 淑程
    您好:大象先生,認識你很高興!
    看了您的文章,我深受啟發,非常感謝您!
    我現有一問題請教您:
    我用weblogic10.3 + oracle10g + myeclipse8 ,發布了您的例子!結果出來了,但是同樣報了好多 warn!
    麻煩您 幫我看看是怎么回事
    2010-12-03 16:18:06,171 WARN [org.springframework.aop.framework.Cglib2AopProxy] - <Unable to proxy method [public final void org.springframework.orm.hibernate3.support.HibernateDaoSupport.setSessionFactory(org.hibernate.SessionFactory)] because it is final: All calls to this method via a proxy will be routed directly to the proxy.>
    2010-12-03 16:18:06,203 WARN [org.springframework.aop.framework.Cglib2AopProxy] - <Unable to proxy method [public final org.hibernate.SessionFactory org.springframework.orm.hibernate3.support.HibernateDaoSupport.getSessionFactory()] because it is final: All calls to this method via a proxy will be routed directly to the proxy.>
    2010-12-03 16:18:06,203 WARN [org.springframework.aop.framework.Cglib2AopProxy] - <Unable to proxy method [public final void org.springframework.orm.hibernate3.support.HibernateDaoSupport.setHibernateTemplate(org.springframework.orm.hibernate3.HibernateTemplate)] because it is final: All calls to this method via a proxy will be routed directly to the proxy.>
    2010-12-03 16:18:06,203 WARN [org.springframework.aop.framework.Cglib2AopProxy] - <Unable to proxy method [public final org.springframework.orm.hibernate3.HibernateTemplate org.springframework.orm.hibernate3.support.HibernateDaoSupport.getHibernateTemplate()] because it is final: All calls to this method via a proxy will be routed directly to the proxy.>
    2010-12-03 16:18:06,203 WARN [org.springframework.aop.framework.Cglib2AopProxy] - <Unable to proxy method [public final void org.springframework.dao.support.DaoSupport.afterPropertiesSet() throws java.lang.IllegalArgumentException,org.springframework.beans.factory.BeanInitializationException] because it is final: All calls to this method via a proxy will be routed directly to the proxy.>
    2010-12-03 16:18:06,468 WARN [org.springframework.aop.framework.Cglib2AopProxy] - <Unable to proxy method [public final void org.springframework.orm.hibernate3.support.HibernateDaoSupport.setSessionFactory(org.hibernate.SessionFactory)] because it is final: All calls to this method via a proxy will be routed directly to the proxy.>
    2010-12-03 16:18:06,484 WARN [org.springframework.aop.framework.Cglib2AopProxy] - <Unable to proxy method [public final org.hibernate.SessionFactory org.springframework.orm.hibernate3.support.HibernateDaoSupport.getSessionFactory()] because it is final: All calls to this method via a proxy will be routed directly to the proxy.>
    2010-12-03 16:18:06,484 WARN [org.springframework.aop.framework.Cglib2AopProxy] - <Unable to proxy method [public final void org.springframework.orm.hibernate3.support.HibernateDaoSupport.setHibernateTemplate(org.springframework.orm.hibernate3.HibernateTemplate)] because it is final: All calls to this method via a proxy will be routed directly to the proxy.>
    2010-12-03 16:18:06,484 WARN [org.springframework.aop.framework.Cglib2AopProxy] - <Unable to proxy method [public final org.springframework.orm.hibernate3.HibernateTemplate org.springframework.orm.hibernate3.support.HibernateDaoSupport.getHibernateTemplate()] because it is final: All calls to this method via a proxy will be routed directly to the proxy.>
    2010-12-03 16:18:06,484 WARN [org.springframework.aop.framework.Cglib2AopProxy] - <Unable to proxy method [public final void org.springframework.dao.support.DaoSupport.afterPropertiesSet() throws java.lang.IllegalArgumentException,org.springframework.beans.factory.BeanInitializationException] because it is final: All calls to this method via a proxy will be routed directly to the proxy.>
    Hibernate: select user0_.id as id1_0_, user0_.name as name1_0_, user0_.role_id as role3_1_0_ from users user0_ where user0_.id=?
    ID: 1 姓名: 張三
    Hibernate: select role0_.id as id0_0_, role0_.name as name0_0_ from role role0_ where role0_.id=?
    ID: 1 角色名: 超級管理員  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2010-12-03 16:49 | 淑程
    我只做了一個修改,就是把 User實體類中 的 @Table(name = "user") 改為 了 @Table(name = "users")  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2010-12-04 23:32 | 菠蘿大象
    @淑程
    呵呵,能對你有幫助是我最快樂的事,對于你的這個疑問,其實不算什么問題,如果你看過spring的HibernateDaoSupport源碼,就應該明白了,setSessionFactory前面定義了final,就是不可覆蓋,對于使用cglib代理來說,它是會對方法進行覆蓋的,要將數據源連接工廠注入到HibernateDaoSupport中,這樣我們才能在dao中進行使用,從而與數據庫打交道,所以這是spring源碼設計成了這樣,要想讓這些警告不出現有兩種方法,一是在log4j日志設置中,將HibernateDaoSupport的完整路徑日志級別設置成這樣,org.springframework.orm.hibernate3.support.HibernateDaoSupport=ERROR 另一個方法就是不使用spring的HibernateDaoSupport,而是采取純Hibernate方式,就是說不繼承spring的HibernateDaoSupport  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五)[未登錄] 2011-01-10 16:04 | test
    你這項獲取出來的HibernateDaoSupport里的session為空  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2011-01-11 08:40 | 菠蘿大象
    @test
    這些例子我都測試過,另外如果要是有問題,前面會有人提出來的,你再檢查一下,是不是哪里沒有設置正確  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五)[未登錄] 2011-01-11 10:52 | test
    @菠蘿大象
    不知道為什么 我進入action里面dao不能注入 manager也不能注入。全部為null,我直接用的你的源碼。也沒報什么錯誤 啟動的時候 奇怪了  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2011-01-18 09:40 | taote
    我收藏了您的博客,內容寫的很好,很實在。另外,我也比較同意博主的許多觀點,希望博主繼續努力,繼續出精品。呵呵。。。關注中。。。。  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2011-01-18 11:02 | 菠蘿大象
    @test
    這個真沒辦法幫你了,應該還是設置問題,如果代碼有問題的話,我是不會放上來的  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2011-01-18 11:02 | 菠蘿大象
    @taote
    謝謝  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2011-03-22 18:23 | 楚風狂人
    大象,能不能加我QQ,我最近在看你的博文,學習注解編程的思路,有問題希望你能指點一下,謝謝,
    QQ:605501800  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2011-04-03 23:30 | java小菜
    看完了這個全注解文章,覺得收獲很多,大象大哥的經驗對我個人真的很有用,個人覺得這些文章真的是用心寫,而不是像很多都是復制粘貼,支持,另外覺得圖片加上自己的水印沒什么問題的,不影響閱讀就好,畢竟這是自己的原創,加上自己的水印沒什么不妥  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2011-04-26 15:57 | 下著雪的夜
    大象,我剛接觸sturts2,讀了你關于SSH2全注解實例詳解的文章覺得受益匪淺。在此先頂你,知道你是追求完美的作家,期待你更好的新文章,加油!!!  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2011-04-26 15:59 | 菠蘿大象
    @下著雪的夜
    大象我不是為了追求完美,而是現在忙得人快掛了,哪還有時間寫博客,非常杯具,我是一只杯具象!  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2011-04-27 09:10 | 下著雪的夜
    大象,快到5.1了,多加休息,注意身體,再次頂你。謝謝你的博文,體會到你是在用心寫  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2011-05-05 16:25 | 王旭
    大象哥,你好人做到底吧,把jar包也都放進去吧。呵呵····  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2011-05-16 11:33 | 李亮
    可不可以把源碼發下  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2011-05-16 11:35 | 菠蘿大象
    @李亮
    我就在這篇放了源碼啊,你確定看完了沒?  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2011-05-16 11:43 | 李亮
    @菠蘿大象
    嗯 已經下來了 剛沒注意  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2011-05-16 11:51 | 李亮
    留個聯系方式好嗎 我QQ568442868 但現在公司不讓上Q 加上我吧 不懂的請教下  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2011-05-18 12:42 | 李亮
    把jar包發下好嗎 我按這你寫的那些jar包在網上下了一堆 最后一個一個對比 可最后還是報錯  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2011-05-18 13:38 | 菠蘿大象
    @李亮
    這位童鞋,不是大象不放,而是blogjava的空間有限啊,另外我在文章里不是說了嗎,把spring,struts和hibernate這三個壓縮包下下來后,很多jar包就都有了,哪需要像你說的,去網上下一堆包,如果你會用maven的話,就更簡單了,大象的下篇spring mvc 3+spring 3+mybatis 3系列將采用maven來構建,這樣就讓大家不用浪費時間去找jar包了  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2011-05-19 16:50 | 李亮
    源碼里怎么沒有StrutAction啊  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2011-05-19 16:58 | 菠蘿大象
    @李亮
    這個肯定是有的  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2011-12-31 17:14 | 阿斯蒂芬
    @阿飛我也碰到你的問題了 你解決了嗎  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2011-12-31 17:41 | 阿斯蒂芬
    @阿飛
    能告訴我你的解決方法嗎  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2012-01-01 20:45 | 阿斯蒂芬
    2012-1-1 20:43:26 org.apache.catalina.core.AprLifecycleListener init
    信息: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: D:\Program Files\Java\jdk1.6.0_20\jre\bin;D:\Program Files\Apache Software Foundation\Tomcat 7.0\bin
    2012-1-1 20:43:28 org.apache.coyote.AbstractProtocol init
    信息: Initializing ProtocolHandler ["http-bio-8080"]
    2012-1-1 20:43:28 org.apache.coyote.AbstractProtocol init
    信息: Initializing ProtocolHandler ["ajp-bio-8009"]
    2012-1-1 20:43:28 org.apache.catalina.startup.Catalina load
    信息: Initialization processed in 2268 ms
    2012-1-1 20:43:28 org.apache.catalina.core.StandardService startInternal
    信息: Starting service Catalina
    2012-1-1 20:43:28 org.apache.catalina.core.StandardEngine startInternal
    信息: Starting Servlet Engine: Apache Tomcat/7.0.22
    2012-1-1 20:43:28 org.apache.catalina.startup.HostConfig deployDirectory
    信息: Deploying web application directory docs
    2012-1-1 20:43:29 org.apache.catalina.util.SessionIdGenerator createSecureRandom
    信息: Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [109] milliseconds.
    2012-1-1 20:43:29 org.apache.catalina.startup.HostConfig deployDirectory
    信息: Deploying web application directory examples
    2012-1-1 20:43:29 org.apache.catalina.core.ApplicationContext log
    信息: ContextListener: contextInitialized()
    2012-1-1 20:43:29 org.apache.catalina.core.ApplicationContext log
    信息: SessionListener: contextInitialized()
    2012-1-1 20:43:29 org.apache.catalina.core.ApplicationContext log
    信息: ContextListener: attributeAdded('org.apache.jasper.compiler.TldLocationsCache', 'org.apache.jasper.compiler.TldLocationsCache@1a550f9')
    2012-1-1 20:43:29 org.apache.catalina.startup.HostConfig deployDirectory
    信息: Deploying web application directory host-manager
    2012-1-1 20:43:29 org.apache.catalina.startup.HostConfig deployDirectory
    信息: Deploying web application directory manager
    2012-1-1 20:43:29 org.apache.catalina.startup.HostConfig deployDirectory
    信息: Deploying web application directory ROOT
    2012-1-1 20:43:30 org.apache.catalina.startup.HostConfig deployDirectory
    信息: Deploying web application directory ssh2
    2012-1-1 20:43:30 org.apache.catalina.startup.HostConfig deployDirectory
    信息: Deploying web application directory test
    2012-1-1 20:43:39 com.sun.faces.config.ConfigureListener contextInitialized
    信息: Initializing Sun's JavaServer Faces implementation (1.2_04-b07-FCS) for context '/test'
    2012-1-1 20:43:40 com.sun.faces.spi.InjectionProviderFactory createInstance
    信息: JSF1048: PostConstruct/PreDestroy annotations present. ManagedBeans methods marked with these annotations will have said annotations processed.
    2012-1-1 20:43:40 org.apache.coyote.AbstractProtocol start
    信息: Starting ProtocolHandler ["http-bio-8080"]
    2012-1-1 20:43:40 org.apache.coyote.AbstractProtocol start
    信息: Starting ProtocolHandler ["ajp-bio-8009"]
    2012-1-1 20:43:40 org.apache.catalina.startup.Catalina start
    信息: Server startup in 12583 ms



    還是打不開hello.action 報404  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2012-01-07 22:16 | 阿斯蒂芬
    allRoals 是怎么得到的啊  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2012-02-23 14:00 | IT菜鳥
    哥們,你好,看了你寫的這個系列的博客,我從中真的獲益良多,以前不懂的問題,現在也基本弄清楚了,還有一些是我沒有遇到過卻很實用的方法,在這里,我真的很感謝你的分享。另外,能不能麻煩你把你的這個源碼發到我郵箱去呢,雖然跟著你的思路做了一遍,也花了很長的時間進行排錯,但是還是會出現一些地方不慎了解,希望能夠通過你完整的代碼給自己一些啟示。我的郵箱:592096788@qq.com。謝謝了。  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2012-03-10 19:41 | 花之戀
    你好,剛看了你的博客,自己也試著做了一遍,最后還是出現了“迷途的羔羊”所說的錯誤,能把完整的源碼發我一份嗎,包括JAR包,萬分感謝呀,wolfsept@qq.com,一切為了SSH2.  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2012-03-11 12:03 | 花之戀
    代理的問題調通了,把tx:annotation-driven這個注釋去掉,屏蔽掉aop:config及tx:active即可。  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五)[未登錄] 2012-06-01 10:14 | king
    哥們 我在這個框架下 加入 jacob.jar進行 word轉HTML 可在執行ActiveXComponent app = new ActiveXComponent("Word.Application") 時 單步跟蹤提示 Source not found for WordToHTML$$FastClassByCGLIB$$c5de4c5b.invoke(int, Object, Object[]) line: not available 其它無任何錯誤信息,是不是被哪個攔截器攔截了?請指教一下  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2012-06-01 10:35 | 菠蘿大象
    @king
    你跟蹤到哪里了?是jacob里面么?那得要源代碼才行了  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2012-10-13 21:36 | sjmhai
    大象我用你的框架拓展了一下發現
    @Autowired標注后我發現他的數據是時時的。
    比如在
    public class LookAction extends StrutsAction<Look>{
    @Autowired
    private LookManager lookManager;
    public String rebuild() throws Exception{
    Look look =lookManager.getLook(1);
    for(int 1=0;i<10;i--){
    zid=look.getZid();
    System.out.println(zid);
    look.setZid(i);
    hibernateDao.save(look);
    }
    }
    }
    中 輸出的zid是隨著存儲的值變化而變化的。大象能幫我解釋一下么?  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2012-10-16 11:45 | 菠蘿大象
    @sjmhai
    這個例子中用到了JPA,其中有個主鍵生成策略,在每個實體對象的ID屬性上,都作了標識,你可以看看,如果還不清楚,可以先看看我之前的 學習JPA——Hibernate Annotation使用實例這篇文章,對這個有過說明。  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五)[未登錄] 2013-01-05 15:48 | kevin
    怎么和springside這么像  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2013-01-05 15:52 | 菠蘿大象
    @kevin
    借鑒了springside,同時又作了改進,最大的不同應該是我對整個整合過程進行了詳細分析,而springside卻只有一些示例演示。  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2014-01-14 19:32 | sss
    @菠蘿大象

    大象哥啊
    我看回復中有幾個都遇到這個問題,請幫我們看看吧。主要是struts2的錯
    http://bbs.csdn.net/topics/390693520?page=1#post-396590991  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2014-01-15 09:10 | 菠蘿大象
    @sss
    這位同學,看起來你應該是剛剛開始學習struts2,應該也下了我的源碼,我的建議是你先什么都不要改,直接運行我的示例程序,先看下運行結果,然后將我的第四篇文章完全看懂了之后再動手做,例子是沒問題的,不然這么長時間早就會有很多人反應了。  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2014-03-11 11:14 | mlc
    @菠蘿大象
    大象你好!在測試你的例子的時候出現了好多jar包沖突問題,能不能把你這個項目的jar包發給我一下,謝謝你了~(chenmeil@foxmail.com)  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2014-03-11 17:04 | 菠蘿大象
    @mlc
    實在是抱歉,這個例子我寫的很早了,那時候沒用maven,最近剛換工作,事情比較多,等我有空用maven重構一次發上來,供有需要的朋友下載。  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2014-03-13 12:02 | mlc
    謝謝,問題我解決了,原來是我用了hibernate4,而spring2兼容hibernate3的類有部分類已經不適用了。另外,我想問下大象,在第四章中(“假如說,你想執行其它方法該怎么辦呢?可以在location里面這樣定義,location="user!input.action"。”),里面的為什么用到“!”?@菠蘿大象  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2014-03-14 09:18 | 菠蘿大象
    @mlc
    你可以再去看下這一段說明,默認是執行execute方法,所以就是user.action,其它的方法就要加上方法名了。  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2014-03-14 10:33 | mlc
    location="user!input.action",user后邊的嘆號有什么作用?@菠蘿大象  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2014-03-14 15:13 | mlc
    哦,懂了。用來連接除默認方法外的其它方法。謝謝大象!@菠蘿大象

      回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2014-03-15 01:51 | acgz
    <s:select name="role_id" list="allRoles" listKey="id" listValue="name" headerKey="" headerValue="--請選擇--" /> ~(引自user.jsp),這行什么意思呀?報錯:org.apache.jasper.JasperException: tag 'select', field 'list', name 'role_id': The requested list key 'allRoles' could not be resolved as a collection/array/map/enumeration/iterator type. Example: people or people.{name} - [unknown location],allRoles方法返回的是List型,用iterator迭代輸出,怎么會錯了呢?求大象答疑啊~~~
    @菠蘿大象  回復  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2014-03-20 16:23 | 菠蘿大象
    @acgz
    你運行我的這個例子有問題?allRoles是一個list,在UserAction代碼里面有個getAllRoles方法,它用來把allRoles的數據放入到struts2的棧里面,這樣在頁面上就可以用struts2的標簽取到,listKey="id" listValue="name"都是Role這個對象的屬性,這個必須與Role里面保持一致  回復  更多評論
      
    主站蜘蛛池模板: 老湿机一区午夜精品免费福利| 日韩免费高清视频网站| 免费手机在线看片| 91嫩草亚洲精品| 亚洲AV无码久久| 国产日韩成人亚洲丁香婷婷| 午夜视频免费成人| 性xxxxx免费视频播放| 久久免费精彩视频| 拍拍拍无挡视频免费观看1000| 香蕉视频免费在线播放| 亚洲欧美日韩一区二区三区| 亚洲一区二区免费视频| 亚洲理论片在线观看| 亚洲av福利无码无一区二区| 超清首页国产亚洲丝袜| 亚洲国产精品碰碰| 免费a级毛片无码a∨性按摩| 色www永久免费视频| 免费A级毛片无码免费视| 18禁网站免费无遮挡无码中文| 亚洲免费在线播放| 久久免费观看国产99精品| 久久精品成人免费看| 国产免费一区二区视频| a成人毛片免费观看| 中文字幕不卡免费高清视频| sss在线观看免费高清| 一级黄色免费毛片| 久久精品无码专区免费| 久久九九免费高清视频| 91在线视频免费观看| 野花香在线视频免费观看大全| 青青操视频在线免费观看| 国产猛男猛女超爽免费视频| 日本一道本不卡免费| 老汉精品免费AV在线播放| 精品无码免费专区毛片| 亚洲免费网站观看视频| 在线精品免费视频无码的| 免费看男女下面日出水视频|