<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
        這是本系列的最后一章,大象對示例進(jìn)行適當(dāng)?shù)臄U充并說明。
        其實到第四篇,對于示例的說明就已經(jīng)全部講完了,如果按照這樣的例子,很難有什么值得學(xué)習(xí)的地方。大象本著寫點有用東西的原則,在這章,對示例進(jìn)行一下適當(dāng)?shù)臄U充并說明。
        第五部分:擴展框架
        paramsPrepareParamsStack攔截器棧
        paramsPrepareParamsStack這個攔截器棧是在struts2-default.xml中定義的,里面包含了很多個攔截器,最重要的是這三個:paramspreparemodelDriven。我們只要記住這樣幾點。
        params:它負(fù)責(zé)將請求參數(shù)值設(shè)置到Action中與之同名的屬性中。
        prepare:當(dāng)Action實現(xiàn)了Preparable接口時,這個攔截器就會調(diào)用prepare()方法。如果你有想在execute()方法之前執(zhí)行的邏輯處理,它就可以幫你完成這個功能。
        modelDriven:如果Action實現(xiàn)了ModelDriven接口,這個攔截器就會把getModel()方法中的返回結(jié)果壓入值棧。這就意味著,可以在結(jié)果頁面上直接使用model對象的屬性。
        它的執(zhí)行順序是這樣的
        首先,params攔截器會給action中的相關(guān)參數(shù)賦值,如idusernamepassword等等。
        然后,prepare攔截器執(zhí)行prepare()方法,prepare()會根據(jù)參數(shù),如id,去調(diào)用相關(guān)的方法,設(shè)置model對象。當(dāng)然,實現(xiàn)的這個接口方法由你自己來定義,不局限只設(shè)置model之類的功能。
        接著,modelDriven攔截器會將model對象壓入值棧,因為它是把getModel()方法中的返回結(jié)果放到值棧中,而這個方法的返回類型是個泛型參數(shù),在實現(xiàn)ModelDriven接口的時候,可以給它指定一個具體的對象類型,因此返回類型也將是這個指定的對象類型,如ModelDriven<User>
        最后,params攔截器會將參數(shù)再賦值給model對象。
        思考修改與保存這兩種動作。當(dāng)點擊人員修改時,請求為:user!input.action?id=1params攔截器會將id參數(shù)值設(shè)置到Action中的id屬性,請一定注意,id屬性要有set()方法,然后prepare攔截器開始在prepare()方法中,根據(jù)這個id值取得User對象,接著modelDriven會調(diào)用getModel()方法,此時,方法中返回的是user對象,所以會把user加入到值棧中,最后再執(zhí)行一次params攔截器,但這時沒有其它的參數(shù)值需要賦值給user對象,所以程序會接著往下走,這里假定沒有其它的業(yè)務(wù)邏輯,執(zhí)行返回,字符串為input,根據(jù)前面講的插件知識,結(jié)果頁面為user-input.jsp,那么就跳轉(zhuǎn)到修改頁面了,而且頁面中表單域?qū)@示數(shù)據(jù)庫中的值。如果理解了修改,那么保存也就清楚了。
        prepare()方法雖然不錯,但是也有弊端,那就是它會對Action中的每個方法都進(jìn)行攔截,不管你是執(zhí)行execute還是input,還是其它的自定義方法,它都會對其攔截,這當(dāng)然不是我們所希望的。那有沒有更好的方式?答案是肯定的,請接著往下看。
        prepareMethedName
        使用prepare攔截器的另一種形式,在prepare名稱后面加上需要攔截的方法名。比如,你要攔截input方法,可以寫成prepareInput,需要攔截save方法,就寫上prepareSave。采取這樣的方式后,將會在執(zhí)行這些方法之前時,才對它們進(jìn)行攔截。
        例如,請求role!input.action,會執(zhí)行RoleAction中的input方法,如果我們設(shè)置了prepareInput方法,則會先進(jìn)入此方法執(zhí)行,執(zhí)行完后再回到input方法往下執(zhí)行。
        請注意,在使用這種方式時,Preparable接口定義的prepare()方法體內(nèi)不要含有任何代碼,就是說給這個方法一個空實現(xiàn)。這樣,它就什么都不做,所有的攔截處理就全部交由相應(yīng)的prepareMethedName來完成。
        
        
        它們在每個對應(yīng)的方法之前執(zhí)行。prepareEntity就是來初始化實體對象,然后由modelDriven攔截器將getModel()方法中的返回結(jié)果放入值棧,當(dāng)返回頁面時,就可以直接取值了。
        StrutsAction
        重新定義一個基類,里面封裝大部分的通用操作,主要依靠泛型來實現(xiàn),將hibernateDao注解進(jìn)來,通過繼承這個基類進(jìn)行基本的CRUD操作。本文末尾提供示例源碼下載,里面有詳細(xì)的注釋,這里我只貼出部分重要代碼進(jìn)行說明,為了行文需要,有些注釋去掉了,但源碼里面都有,請大家放心。
        
        通過擴展ActionSupport,使用泛型參數(shù),構(gòu)造函數(shù)根據(jù)反射得到T的具體類型。
        
        這就是默認(rèn)的執(zhí)行方法,基本的操作,在這個超類里面都進(jìn)行了定義,每個方法里面設(shè)置的以do開頭的方法,是方便讓子類進(jìn)行覆蓋,當(dāng)基本的業(yè)務(wù)邏輯無法滿足我們的需求時,就可以在子類重寫這些方法。
        
        方法有默認(rèn)實現(xiàn),主要是列表顯示,保存和刪除,新增和修改已經(jīng)有getModel()方法取得實體,在頁面上使用s標(biāo)簽就可以直接取值,除非有特殊的業(yè)務(wù)需求,否則不用覆蓋doInputEntity()doViewEntity()方法。請注意,當(dāng)需要實現(xiàn)自己的邏輯時,只需要覆蓋上面定義的這些方法,而不用重寫executeinput之類。
        我對HibernateDao又進(jìn)行了適當(dāng)?shù)臄U展與修改,提供了更多的基本封裝方法,不過大家還可以繼續(xù)添加。里面都有詳細(xì)的注釋,這里就不在贅述了。
        功能擴展
        我對例子做了兩個功能,一個是角色表的增加、修改、刪除、查看,另一個就是用戶表的查詢。可以從源碼中看到,我在RoleAction中沒有寫一行關(guān)于增刪改查的代碼,因為它屬于基本操作,超類中已經(jīng)封裝好了,所以這部分的代碼都省了。對于用戶表的查詢,我覆蓋了doListEntity()方法,在業(yè)務(wù)層進(jìn)行條件封裝,執(zhí)行查詢,返回結(jié)果。
        
        這個list就是在超類中定義的,因為默認(rèn)實現(xiàn)中也用到了list,另外list有一個get方法,用于在頁面中顯示。如果不想采取方式取得list集合,就重寫doListEntity()方法。這里說明下,我是沒有加分頁功能的,大家可以按自己的方式添加分頁查詢。
        在用戶查詢方法中,我使用的是QBC對象查詢,因為這種方式很簡潔,不過我在HibernateDao中也寫了HQLSQL方式的查詢方法,并進(jìn)行了封裝,可以很方便的調(diào)用。
        
        
        這個queryResult方法的定義,你可以改為傳遞用戶名與角色ID的參數(shù),大象在這里就是為了方便,直接使用Request請求。這里userDao調(diào)用的query方法是在HibernateDao里面封裝的,因為繼承了HibernateDao,就直接在Service層拿來用了。至于具體的,可以去看源碼。
        頁面部分沒有進(jìn)行大的調(diào)整,主要是將role-list.jsp重命名為role.jsp,因為使用的是超類的默認(rèn)實現(xiàn)。添加了role-input.jsprole-view.jsp兩個文件,并在user.jsp中,加入了查詢條件。這些代碼都很簡單就不再貼了,而且前一篇也貼過一部分。
        對于這個例子的完整講解說明就到此結(jié)束了。大象還想補充說明一下,這個例子只適用于學(xué)習(xí),不適合商用,想在實際項目中運用,還需要對框架做大量的改造工作。本系列只是基于SSH2入門學(xué)習(xí)之用,源碼中不含jar包,下圖是本例中所需的最少jar文件,大家只要下載了springstrutshibernate三個完整壓縮包,那么這些jar基本上都包含了。
        
        發(fā)布并啟動Tomcat,然后輸入訪問地址:http://localhost:8080/ssh2 運行該示例,看看效果。
        源碼下載: ssh2  ssh2-maven 
        本文為菠蘿大象原創(chuàng),如要轉(zhuǎn)載請注明出處。http://m.tkk7.com/bolo
    posted on 2010-05-30 13:34 菠蘿大象 閱讀(17045) 評論(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)  回復(fù)  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2010-05-31 08:45 | 菠蘿大象
    @ybj316
    你的版本是什么?這個錯誤是沒有Aspectj的jar包,你應(yīng)該用了struts2.1.8.1吧,Aspectj在spring里面有,另外我博客里面空間快滿了,沒法上傳這些jar  回復(fù)  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2010-08-06 17:07 | tt
    很好的設(shè)計思想,我看了兩天大概還只是大概看懂,充分的利用泛型 繼承 多態(tài),代碼簡潔明了!沒這個文字介紹 真的看不懂。主要是struts2 annotation 的資料太少了!我想把這個思路充分利用到工作中,想在實際項目中運用。不知道為什么你說只能做學(xué)習(xí)用?  回復(fù)  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2010-08-06 17:09 | tt
    沒jar包的 找我!qq:87513277   回復(fù)  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2010-08-08 21:24 | 菠蘿大象
    @tt
    原因就是這個框架太簡單了,比如沒有登錄攔截器,AOP切面,自定義標(biāo)簽,分頁功能,監(jiān)聽器,模板,等等等等。。。。總之可以擴充的東西還有很多很多,我這樣寫,是方便大家學(xué)習(xí)。在你們理解后,就可以自己來擴展這個框架,也可以按自己的理解自己建框架。  回復(fù)  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五)[未登錄] 2010-08-20 13:38 | 阿飛
    按照你的例子(只改了數(shù)據(jù)庫連接)用TOMCAT運行起來沒有錯誤,但是訪問時候都出現(xiàn)404錯誤(在HelloAction中打印語句,發(fā)現(xiàn)根本沒有調(diào)用HelloAction),請問時什么原因。  回復(fù)  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2010-08-21 20:49 | 菠蘿大象
    @阿飛
    這位童鞋,例子是沒問題滴,你是否都按我說的做過呢?  回復(fù)  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五)[未登錄] 2010-08-31 09:18 | kang
    之前通過配置文件來進(jìn)行 注入的時候,都是需要通過接口來進(jìn)行注入的
    請問為什么現(xiàn)在沒有注入接口,而是直接注入了實現(xiàn)類,那既然可以直接調(diào)用實現(xiàn)類,為什么還需要注入,我直接調(diào)用就的了。。。。

    初學(xué)者,不解之,望告之!  回復(fù)  更多評論
      
    # 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容器中來,供程序調(diào)用,同時又因為我沒用接口而直接使用類所以在處理事務(wù)的時候就要用到cglib代理方式,請注意<aop:config proxy-target-class="true">這句話,這個proxy-target-class默認(rèn)是為false的,默認(rèn)為接口。請你看下第二篇的配置文件說明。  回復(fù)  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2010-08-31 11:13 |
    大象,可以加我MSN嗎?
    想咨詢你一些問題。
    謝謝:kzkking@live.cn  回復(fù)  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2010-08-31 11:21 | 菠蘿大象
    @坤
    不好意思啊,我從來不用MSN,只用QQ  回復(fù)  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五)[未登錄] 2010-08-31 11:33 | kang
    @菠蘿大象
    大象,那我如果想使用接口來進(jìn)行注入

    除了修改 <aop:config proxy-target-class="false"> 外 還需要修改哪些呢?  回復(fù)  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五)[未登錄] 2010-08-31 11:34 |
    @菠蘿大象
    那加我QQ吧
    262735260 謝謝了!  回復(fù)  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2010-09-02 16:08 | Terry Wang
    讀完了這一系列文章,看得出大象真的是用心在寫作,精神可嘉,博文不錯,博主加油,大象加油!  回復(fù)  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2010-09-02 16:18 | 菠蘿大象
    @Terry Wang
    謝謝支持,我會更努力的!  回復(fù)  更多評論
      
    # 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.>
    出了一堆警告,什么數(shù)據(jù)也沒從數(shù)據(jù)庫查詢出來,這是什么原因啊?  回復(fù)  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2010-09-06 10:54 | 菠蘿大象
    @迷途的羔羊
    這位童鞋,你確定都是按我說的做的嗎?你將示例下載后運行了沒有?你看最后一行有異常出現(xiàn)了,你沒有加入事務(wù)控制。  回復(fù)  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2010-09-06 16:00 | 迷途的羔羊
    @菠蘿大象
    我運行了你的代碼,也是同樣的警告,但是能查詢,打開show_sql,可以看到你的代碼會打印出sql,我的不會打印sql,也就沒有結(jié)果了,這是怎么回事啊?  回復(fù)  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2010-09-06 16:09 | 菠蘿大象
    @迷途的羔羊
    你的代碼是自己寫的還是在我的基礎(chǔ)上改的?如果你想自己寫,請一定要完全理解后再做。  回復(fù)  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2010-09-06 17:18 | 迷途的羔羊
    @菠蘿大象
    呃,找到原因了,實體類的配置映射目錄沒有要比實際的包路徑少一層,好莫名的原因啊  回復(fù)  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2010-09-06 19:32 | 菠蘿大象
    @迷途的羔羊
    我在第二篇配置文件詳解中就講過,請注意這個路徑的寫法,如果寫的不對,是不會映射實體的。  回復(fù)  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2010-10-08 16:04 | 窩窩影視
    基本理解了 ,真是個細(xì)心的人啊  回復(fù)  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2010-10-20 18:05 | yiyicun
    很好 對于初學(xué)者很合適···  回復(fù)  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2010-12-03 16:43 | 淑程
    您好:大象先生,認(rèn)識你很高興!
    看了您的文章,我深受啟發(fā),非常感謝您!
    我現(xiàn)有一問題請教您:
    我用weblogic10.3 + oracle10g + myeclipse8 ,發(fā)布了您的例子!結(jié)果出來了,但是同樣報了好多 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 角色名: 超級管理員  回復(fù)  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2010-12-03 16:49 | 淑程
    我只做了一個修改,就是把 User實體類中 的 @Table(name = "user") 改為 了 @Table(name = "users")  回復(fù)  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2010-12-04 23:32 | 菠蘿大象
    @淑程
    呵呵,能對你有幫助是我最快樂的事,對于你的這個疑問,其實不算什么問題,如果你看過spring的HibernateDaoSupport源碼,就應(yīng)該明白了,setSessionFactory前面定義了final,就是不可覆蓋,對于使用cglib代理來說,它是會對方法進(jìn)行覆蓋的,要將數(shù)據(jù)源連接工廠注入到HibernateDaoSupport中,這樣我們才能在dao中進(jìn)行使用,從而與數(shù)據(jù)庫打交道,所以這是spring源碼設(shè)計成了這樣,要想讓這些警告不出現(xiàn)有兩種方法,一是在log4j日志設(shè)置中,將HibernateDaoSupport的完整路徑日志級別設(shè)置成這樣,org.springframework.orm.hibernate3.support.HibernateDaoSupport=ERROR 另一個方法就是不使用spring的HibernateDaoSupport,而是采取純Hibernate方式,就是說不繼承spring的HibernateDaoSupport  回復(fù)  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五)[未登錄] 2011-01-10 16:04 | test
    你這項獲取出來的HibernateDaoSupport里的session為空  回復(fù)  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2011-01-11 08:40 | 菠蘿大象
    @test
    這些例子我都測試過,另外如果要是有問題,前面會有人提出來的,你再檢查一下,是不是哪里沒有設(shè)置正確  回復(fù)  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五)[未登錄] 2011-01-11 10:52 | test
    @菠蘿大象
    不知道為什么 我進(jìn)入action里面dao不能注入 manager也不能注入。全部為null,我直接用的你的源碼。也沒報什么錯誤 啟動的時候 奇怪了  回復(fù)  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2011-01-18 09:40 | taote
    我收藏了您的博客,內(nèi)容寫的很好,很實在。另外,我也比較同意博主的許多觀點,希望博主繼續(xù)努力,繼續(xù)出精品。呵呵。。。關(guān)注中。。。。  回復(fù)  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2011-01-18 11:02 | 菠蘿大象
    @test
    這個真沒辦法幫你了,應(yīng)該還是設(shè)置問題,如果代碼有問題的話,我是不會放上來的  回復(fù)  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2011-01-18 11:02 | 菠蘿大象
    @taote
    謝謝  回復(fù)  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2011-03-22 18:23 | 楚風(fēng)狂人
    大象,能不能加我QQ,我最近在看你的博文,學(xué)習(xí)注解編程的思路,有問題希望你能指點一下,謝謝,
    QQ:605501800  回復(fù)  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2011-04-03 23:30 | java小菜
    看完了這個全注解文章,覺得收獲很多,大象大哥的經(jīng)驗對我個人真的很有用,個人覺得這些文章真的是用心寫,而不是像很多都是復(fù)制粘貼,支持,另外覺得圖片加上自己的水印沒什么問題的,不影響閱讀就好,畢竟這是自己的原創(chuàng),加上自己的水印沒什么不妥  回復(fù)  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2011-04-26 15:57 | 下著雪的夜
    大象,我剛接觸sturts2,讀了你關(guān)于SSH2全注解實例詳解的文章覺得受益匪淺。在此先頂你,知道你是追求完美的作家,期待你更好的新文章,加油!!!  回復(fù)  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2011-04-26 15:59 | 菠蘿大象
    @下著雪的夜
    大象我不是為了追求完美,而是現(xiàn)在忙得人快掛了,哪還有時間寫博客,非常杯具,我是一只杯具象!  回復(fù)  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2011-04-27 09:10 | 下著雪的夜
    大象,快到5.1了,多加休息,注意身體,再次頂你。謝謝你的博文,體會到你是在用心寫  回復(fù)  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2011-05-05 16:25 | 王旭
    大象哥,你好人做到底吧,把jar包也都放進(jìn)去吧。呵呵····  回復(fù)  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2011-05-16 11:33 | 李亮
    可不可以把源碼發(fā)下  回復(fù)  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2011-05-16 11:35 | 菠蘿大象
    @李亮
    我就在這篇放了源碼啊,你確定看完了沒?  回復(fù)  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2011-05-16 11:43 | 李亮
    @菠蘿大象
    嗯 已經(jīng)下來了 剛沒注意  回復(fù)  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2011-05-16 11:51 | 李亮
    留個聯(lián)系方式好嗎 我QQ568442868 但現(xiàn)在公司不讓上Q 加上我吧 不懂的請教下  回復(fù)  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2011-05-18 12:42 | 李亮
    把jar包發(fā)下好嗎 我按這你寫的那些jar包在網(wǎng)上下了一堆 最后一個一個對比 可最后還是報錯  回復(fù)  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2011-05-18 13:38 | 菠蘿大象
    @李亮
    這位童鞋,不是大象不放,而是blogjava的空間有限啊,另外我在文章里不是說了嗎,把spring,struts和hibernate這三個壓縮包下下來后,很多jar包就都有了,哪需要像你說的,去網(wǎng)上下一堆包,如果你會用maven的話,就更簡單了,大象的下篇spring mvc 3+spring 3+mybatis 3系列將采用maven來構(gòu)建,這樣就讓大家不用浪費時間去找jar包了  回復(fù)  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2011-05-19 16:50 | 李亮
    源碼里怎么沒有StrutAction啊  回復(fù)  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2011-05-19 16:58 | 菠蘿大象
    @李亮
    這個肯定是有的  回復(fù)  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2011-12-31 17:14 | 阿斯蒂芬
    @阿飛我也碰到你的問題了 你解決了嗎  回復(fù)  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2011-12-31 17:41 | 阿斯蒂芬
    @阿飛
    能告訴我你的解決方法嗎  回復(fù)  更多評論
      
    # 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  回復(fù)  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2012-01-07 22:16 | 阿斯蒂芬
    allRoals 是怎么得到的啊  回復(fù)  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2012-02-23 14:00 | IT菜鳥
    哥們,你好,看了你寫的這個系列的博客,我從中真的獲益良多,以前不懂的問題,現(xiàn)在也基本弄清楚了,還有一些是我沒有遇到過卻很實用的方法,在這里,我真的很感謝你的分享。另外,能不能麻煩你把你的這個源碼發(fā)到我郵箱去呢,雖然跟著你的思路做了一遍,也花了很長的時間進(jìn)行排錯,但是還是會出現(xiàn)一些地方不慎了解,希望能夠通過你完整的代碼給自己一些啟示。我的郵箱:592096788@qq.com。謝謝了。  回復(fù)  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2012-03-10 19:41 | 花之戀
    你好,剛看了你的博客,自己也試著做了一遍,最后還是出現(xiàn)了“迷途的羔羊”所說的錯誤,能把完整的源碼發(fā)我一份嗎,包括JAR包,萬分感謝呀,wolfsept@qq.com,一切為了SSH2.  回復(fù)  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2012-03-11 12:03 | 花之戀
    代理的問題調(diào)通了,把tx:annotation-driven這個注釋去掉,屏蔽掉aop:config及tx:active即可。  回復(fù)  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五)[未登錄] 2012-06-01 10:14 | king
    哥們 我在這個框架下 加入 jacob.jar進(jìn)行 word轉(zhuǎn)HTML 可在執(zhí)行ActiveXComponent app = new ActiveXComponent("Word.Application") 時 單步跟蹤提示 Source not found for WordToHTML$$FastClassByCGLIB$$c5de4c5b.invoke(int, Object, Object[]) line: not available 其它無任何錯誤信息,是不是被哪個攔截器攔截了?請指教一下  回復(fù)  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2012-06-01 10:35 | 菠蘿大象
    @king
    你跟蹤到哪里了?是jacob里面么?那得要源代碼才行了  回復(fù)  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2012-10-13 21:36 | sjmhai
    大象我用你的框架拓展了一下發(fā)現(xiàn)
    @Autowired標(biāo)注后我發(fā)現(xiàn)他的數(shù)據(jù)是時時的。
    比如在
    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是隨著存儲的值變化而變化的。大象能幫我解釋一下么?  回復(fù)  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2012-10-16 11:45 | 菠蘿大象
    @sjmhai
    這個例子中用到了JPA,其中有個主鍵生成策略,在每個實體對象的ID屬性上,都作了標(biāo)識,你可以看看,如果還不清楚,可以先看看我之前的 學(xué)習(xí)JPA——Hibernate Annotation使用實例這篇文章,對這個有過說明。  回復(fù)  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五)[未登錄] 2013-01-05 15:48 | kevin
    怎么和springside這么像  回復(fù)  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2013-01-05 15:52 | 菠蘿大象
    @kevin
    借鑒了springside,同時又作了改進(jìn),最大的不同應(yīng)該是我對整個整合過程進(jìn)行了詳細(xì)分析,而springside卻只有一些示例演示。  回復(fù)  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2014-01-14 19:32 | sss
    @菠蘿大象

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

      回復(fù)  更多評論
      
    # 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迭代輸出,怎么會錯了呢?求大象答疑啊~~~
    @菠蘿大象  回復(fù)  更多評論
      
    # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解(五) 2014-03-20 16:23 | 菠蘿大象
    @acgz
    你運行我的這個例子有問題?allRoles是一個list,在UserAction代碼里面有個getAllRoles方法,它用來把allRoles的數(shù)據(jù)放入到struts2的棧里面,這樣在頁面上就可以用struts2的標(biāo)簽取到,listKey="id" listValue="name"都是Role這個對象的屬性,這個必須與Role里面保持一致  回復(fù)  更多評論
      
    主站蜘蛛池模板: 精品国产亚洲AV麻豆 | 亚洲mv国产精品mv日本mv| 国产黄色免费观看| 亚洲男人av香蕉爽爽爽爽| 国产亚洲精彩视频| 国产网站免费观看| 国产精品亚洲综合网站| 国产在线观看免费不卡| 日本精品久久久久久久久免费| 四虎影院在线免费播放| 国产AV无码专区亚洲AV麻豆丫| yy6080久久亚洲精品| 国产va免费观看| 精品国产_亚洲人成在线高清 | 未满十八私人高清免费影院| 亚洲婷婷国产精品电影人久久| 一级毛片成人免费看a| 亚洲国产成人片在线观看| 91福利免费视频| 2017亚洲男人天堂一| 国产不卡免费视频| 亚洲美女自拍视频| 日韩不卡免费视频| 亚洲国产精品无码久久久秋霞1| 在线观看免费亚洲| 久久毛片免费看一区二区三区| 亚洲色欲色欲综合网站| 亚洲1区2区3区精华液| 亚洲福利在线播放| 久久青草91免费观看| 精品亚洲成A人无码成A在线观看| 日本不卡免费新一二三区| 中文字幕在线免费播放| 亚洲一卡二卡三卡四卡无卡麻豆| 免费一级做a爰片性色毛片| 免费看一区二区三区四区| 国产成人亚洲综合一区| 亚洲乱亚洲乱妇无码麻豆| 免费国产成人高清在线观看网站| 无码AV动漫精品一区二区免费| 亚洲特级aaaaaa毛片|