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

          評(píng)論:
          # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實(shí)例詳解(五) 2010-05-30 22:13 | ybj316
          你好!能否把要用到的包壓縮一下提供下載?運(yùn)行tomcat時(shí)報(bào)錯(cuò)!
          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ù)  更多評(píng)論
            
          # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實(shí)例詳解(五) 2010-05-31 08:45 | 菠蘿大象
          @ybj316
          你的版本是什么?這個(gè)錯(cuò)誤是沒有Aspectj的jar包,你應(yīng)該用了struts2.1.8.1吧,Aspectj在spring里面有,另外我博客里面空間快滿了,沒法上傳這些jar  回復(fù)  更多評(píng)論
            
          # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實(shí)例詳解(五) 2010-08-06 17:07 | tt
          很好的設(shè)計(jì)思想,我看了兩天大概還只是大概看懂,充分的利用泛型 繼承 多態(tài),代碼簡(jiǎn)潔明了!沒這個(gè)文字介紹 真的看不懂。主要是struts2 annotation 的資料太少了!我想把這個(gè)思路充分利用到工作中,想在實(shí)際項(xiàng)目中運(yùn)用。不知道為什么你說只能做學(xué)習(xí)用?  回復(fù)  更多評(píng)論
            
          # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實(shí)例詳解(五) 2010-08-06 17:09 | tt
          沒jar包的 找我!qq:87513277   回復(fù)  更多評(píng)論
            
          # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實(shí)例詳解(五) 2010-08-08 21:24 | 菠蘿大象
          @tt
          原因就是這個(gè)框架太簡(jiǎn)單了,比如沒有登錄攔截器,AOP切面,自定義標(biāo)簽,分頁(yè)功能,監(jiān)聽器,模板,等等等等。。。。總之可以擴(kuò)充的東西還有很多很多,我這樣寫,是方便大家學(xué)習(xí)。在你們理解后,就可以自己來擴(kuò)展這個(gè)框架,也可以按自己的理解自己建框架。  回復(fù)  更多評(píng)論
            
          # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實(shí)例詳解(五)[未登錄] 2010-08-20 13:38 | 阿飛
          按照你的例子(只改了數(shù)據(jù)庫(kù)連接)用TOMCAT運(yùn)行起來沒有錯(cuò)誤,但是訪問時(shí)候都出現(xiàn)404錯(cuò)誤(在HelloAction中打印語(yǔ)句,發(fā)現(xiàn)根本沒有調(diào)用HelloAction),請(qǐng)問時(shí)什么原因。  回復(fù)  更多評(píng)論
            
          # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實(shí)例詳解(五) 2010-08-21 20:49 | 菠蘿大象
          @阿飛
          這位童鞋,例子是沒問題滴,你是否都按我說的做過呢?  回復(fù)  更多評(píng)論
            
          # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實(shí)例詳解(五)[未登錄] 2010-08-31 09:18 | kang
          之前通過配置文件來進(jìn)行 注入的時(shí)候,都是需要通過接口來進(jìn)行注入的
          請(qǐng)問為什么現(xiàn)在沒有注入接口,而是直接注入了實(shí)現(xiàn)類,那既然可以直接調(diào)用實(shí)現(xiàn)類,為什么還需要注入,我直接調(diào)用就的了。。。。

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

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

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

            回復(fù)  更多評(píng)論
            
          # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實(shí)例詳解(五) 2014-03-15 01:51 | acgz
          <s:select name="role_id" list="allRoles" listKey="id" listValue="name" headerKey="" headerValue="--請(qǐng)選擇--" /> ~(引自u(píng)ser.jsp),這行什么意思呀?報(bào)錯(cuò):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迭代輸出,怎么會(huì)錯(cuò)了呢?求大象答疑啊~~~
          @菠蘿大象  回復(fù)  更多評(píng)論
            
          # re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實(shí)例詳解(五) 2014-03-20 16:23 | 菠蘿大象
          @acgz
          你運(yùn)行我的這個(gè)例子有問題?allRoles是一個(gè)list,在UserAction代碼里面有個(gè)getAllRoles方法,它用來把a(bǔ)llRoles的數(shù)據(jù)放入到struts2的棧里面,這樣在頁(yè)面上就可以用struts2的標(biāo)簽取到,listKey="id" listValue="name"都是Role這個(gè)對(duì)象的屬性,這個(gè)必須與Role里面保持一致  回復(fù)  更多評(píng)論
            
          主站蜘蛛池模板: 郑州市| 赫章县| 西和县| 绥棱县| 镇平县| 邹平县| 西藏| 怀化市| 龙井市| 鹤庆县| 通许县| 汉中市| 铜陵市| 郓城县| 清丰县| 莱阳市| 仙桃市| 荥经县| 蒙山县| 正蓝旗| 望江县| 山西省| 台东市| 屏东市| 沙坪坝区| 抚宁县| 永寿县| 荣成市| 临颍县| 临泽县| 滨州市| 穆棱市| 台南市| 巴楚县| 梅州市| 台江县| 永吉县| 舟山市| 当阳市| 改则县| 花莲县|