AppFuse是一個(gè)集成了眾多當(dāng)前最流行開(kāi)源框架與工具(包括Hibernate、ibatis、Struts、Spring、DBUnit、Ant、Log4J、Struts Menu、Xdoclet、SiteMesh、OSCache、JUnit、JSTL)于一身的Web開(kāi)發(fā)框架。AppFuse提供了Web系統(tǒng)開(kāi)發(fā)過(guò)程中都需要開(kāi)發(fā)的一些功能,如登陸、用戶密碼加密,用戶管理、根據(jù)不同的用戶可以展現(xiàn)不同的菜單.J2EE開(kāi)發(fā)者也可以在此基礎(chǔ)上開(kāi)發(fā)加入自己的功能模塊。利用這個(gè)框架可以大幅度的提高開(kāi)發(fā)速度。
轉(zhuǎn)自:http://blog.chinaunix.net/u/11409/showart_436247.html
http://blog.csdn.net/changzhang/category/369570.aspx可參考這個(gè)網(wǎng)址
AppFuse是一個(gè)集成了當(dāng)前最流行的Web應(yīng)用框架的一個(gè)更高層次的Web開(kāi)發(fā)框架,也可以說(shuō)是一個(gè)Web開(kāi)發(fā)基礎(chǔ)平臺(tái),它與它所集成的各種框架相比,它提供了一部分所有Web系統(tǒng)開(kāi)發(fā)過(guò)程中都需要開(kāi)發(fā)的一些功能,如登陸、用戶密碼加密,用戶管理、根據(jù)不同的用戶可以展現(xiàn)不同的菜單,可以自動(dòng)生成 40%-60%左右的代碼,自帶了默認(rèn)的一些在CSS中設(shè)定的樣式,使用這些樣式能很快的改變整個(gè)系統(tǒng)的外觀,還有自動(dòng)化測(cè)試的功能。
它最大的價(jià)值就是為我們提供了一個(gè)Web開(kāi)發(fā)的新的方式和思路,盡管這些技術(shù)在國(guó)外都已進(jìn)很流行了,但在國(guó)內(nèi)能夠?qū)ibernate、Struts、 Spring、DBUnit、Ant、Log4J、Struts Menu、Xdoclet、SiteMesh、Velocity、JUnit、JSTL、WebWork這些技術(shù)集成到一個(gè)框架中的還不多見(jiàn),所以即使不使用它的全部功能,它也給我們提供了一個(gè)很好的借鑒、學(xué)習(xí)的機(jī)會(huì)。
通過(guò)關(guān)注AppFuse,我們可以看到目前國(guó)外的主流開(kāi)發(fā)都使用了哪些技術(shù),開(kāi)發(fā)方式是什么樣的,可能達(dá)到什么樣的結(jié)果,而在以前,是很少能夠看到這樣完整的例子的。
AppFuse的另一個(gè)啟示是:我們可以依靠開(kāi)源軟件的功能降低開(kāi)發(fā)成本,而且可以閱讀開(kāi)源軟件的代碼提高所在團(tuán)隊(duì)的整體實(shí)力。
AppFuse 的作者 Matt Raible是當(dāng)今開(kāi)源世界一個(gè)比較活躍的開(kāi)發(fā)者,它是AppFuse、Struts Menu的作者,也是XDoclet、DisplayTag等一些著名開(kāi)源項(xiàng)目的積極參與者,《Hibernate In Action》的作者就在感謝的名單里面提到他,XDoclet的下載版本中所帶的Hibernate標(biāo)簽部分的例子就是他寫(xiě)的,他還是2004年 Apache技術(shù)年會(huì)的主講人之一。
但是通過(guò)2個(gè)月的實(shí)際學(xué)習(xí)和使用,我也遇到一系列的問(wèn)題,因?yàn)锳ppFuse是將其他的一些類庫(kù)或者框架集成在一起的,集成的技術(shù)眾多,而且有一些技術(shù)在國(guó)內(nèi)甚至很少有人知道,資料也比較少,所以雖然作者經(jīng)過(guò)了一些測(cè)試,但都是基于英文編碼的,而對(duì)于中文編碼來(lái)說(shuō),還潛在的存在著一些問(wèn)題,雖然不是AppFuse的問(wèn)題,但卻降低了開(kāi)發(fā)速度,下面是我在開(kāi)發(fā)過(guò)程中遇到過(guò)的問(wèn)題,有些解決了,有些還沒(méi)有解決:
一.Struts
1. AppFuse中默認(rèn)的MVC框架是Struts,而且使用的是LookupDispatchAction,并且使用的是按鈕(button),在XP下用IE瀏覽效果還可以,但如果在2000或者98下,就使外觀很難看,而且當(dāng)時(shí)我還遇到一個(gè)問(wèn)題:如果按鈕顯示中文,則在DisplayTag中翻頁(yè)失靈,而且報(bào)錯(cuò),后來(lái)我把BaseAction的相關(guān)方法改變了,才可以使用,因?yàn)閲?guó)內(nèi)的客戶都比較重視界面,所以后來(lái)我將那些按鈕都改成圖片了,當(dāng)然也要添加一些方法了,有點(diǎn)麻煩!
2. Struts中的標(biāo)簽如今推薦使用的只有html部分的標(biāo)簽了,其他的標(biāo)簽或者可以使用JSTL替代,或者已經(jīng)不推薦使用了,而且AppFuse中推薦使用JSTL,而JSTL和struts的標(biāo)簽的聯(lián)合使用時(shí),需要的不是<html:標(biāo)簽>,而是<html-el:標(biāo)簽>,這個(gè)問(wèn)題曾經(jīng)困擾了我整整2天。
3. Struts的Validation的校驗(yàn)規(guī)則并不完善,比如如果使用客戶端的javascript校驗(yàn),則在郵箱中輸入漢字根本校驗(yàn)不出來(lái),到了服務(wù)器端報(bào)錯(cuò)。
4.最嚴(yán)重的問(wèn)題是AppFuse生成的Struts的validation.xml文件中有許多多余的“.”,如果你去掉了,常常在執(zhí)行ant的 deploy任務(wù)時(shí)又恢復(fù)原樣。這樣是提交表單的時(shí)候經(jīng)常會(huì)報(bào)javascript的腳本錯(cuò)誤或者缺少對(duì)象或者缺少value,所以我會(huì)手工的修改這個(gè)文件,然后把修改后的文件備份,當(dāng)重新生成有錯(cuò)誤的文件時(shí),我會(huì)用備份的沒(méi)有錯(cuò)誤的文件去覆蓋。
5. Struts的validatioin對(duì)于使用同一個(gè)FormBean的Action的校驗(yàn)方式比較復(fù)雜。(待解決)。
二.Hibernate
1. Hibernate是現(xiàn)在受到越來(lái)越多的人推崇的一個(gè)ORM工具(框架、類庫(kù)),它將我們從繁瑣的使用JDBC的開(kāi)發(fā)過(guò)程中解放出來(lái),但同時(shí)也帶來(lái)了新的問(wèn)題,如學(xué)習(xí)曲線,執(zhí)行效率,數(shù)據(jù)庫(kù)設(shè)計(jì)優(yōu)化,還有最重要的靈活性。Hibernate不是一個(gè)很容易上手的東西,要完全駕馭它還需要讀很多資料,但好的資料卻很少。
2. 使用Xdoclet可以很方便的生成Hibernate中的持久類的配置文件(*.hbm.xml),但對(duì)一些特殊的映射卻無(wú)能為力,如使用序列的id生成規(guī)則,序列的名字沒(méi)有地方寫(xiě),所以也只好先利用它生成主要的內(nèi)容,然后手工修改。
3. 同樣還是id的生成策略問(wèn)題,如果使用序列、hilo等需要一些數(shù)據(jù)庫(kù)機(jī)制支持的策略時(shí),schemaExport并不能自動(dòng)生成序列或者保存當(dāng)前id的表,這項(xiàng)工作仍然要手工解決。
4. Hibernate中提供了幾種關(guān)聯(lián),一對(duì)一、一對(duì)多、多對(duì)多,但對(duì)于怎樣調(diào)整效率卻沒(méi)有一個(gè)很明確的提示,還要根據(jù)情況判定,這就帶來(lái)和一些彈性的設(shè)計(jì)。
5. Hibernate中可以選擇的操作數(shù)據(jù)庫(kù)的方式有3種,其中HQL功能最強(qiáng)大,但有些功能使用標(biāo)準(zhǔn)查詢可能會(huì)更方便,但會(huì)有一些限制,所以雖然它很靈活,但易用性不如JDBC好。
三.Spring
在AppFuse的過(guò)程中,Spring完全隱藏在幕后,除了一些配置外,幾乎感覺(jué)不到它的存在,所以我在使用它的過(guò)程中并沒(méi)有遇到什么麻煩,這里只是簡(jiǎn)單的介紹一下它在AppFuse中起到的作用。
1. Spring在AppFuse中起到的主要作用是對(duì)Hibernate的Session和事務(wù)的管理,利用Spring封裝的Hibernate模板類,我們大大地減少了實(shí)現(xiàn)DAO的代碼行數(shù)。
2. Spring還起到了連接映射文件和類之間的關(guān)聯(lián),及接口和實(shí)現(xiàn)類之間的關(guān)聯(lián),這些都依賴于Spring的IoC的機(jī)制的實(shí)現(xiàn)。
3. 對(duì)于字符進(jìn)行編碼和解碼部分用到了Spring自帶的Filter,只需要在配置文件中配置就好了。
四.SiteMesh
SiteMesh是一個(gè)基于Decorator模式的技術(shù),它可以修飾返回的網(wǎng)頁(yè)文件,它的工作方式受到越來(lái)越多的人的推崇,這點(diǎn)從Manning出版的一些技術(shù)書(shū)籍中可以看出來(lái)。
我在使用SiteMesh的過(guò)程中并不順利,我參考了《Java Open Source Programming》,這本書(shū)中說(shuō)SiteMesh在默認(rèn)的情況下不對(duì)下載文件進(jìn)行裝飾,但我在下載文件時(shí)發(fā)現(xiàn),我的文件內(nèi)容被丟棄了,取而代之的是 SiteMesh的模板的內(nèi)容,后來(lái)我通過(guò)修改SiteMesh的配置文件解決了這個(gè)問(wèn)題,但感覺(jué)還有一些不太清楚的地方需要學(xué)習(xí)。
五.DisplayTag
DisplayTag 是一個(gè)優(yōu)秀的顯示內(nèi)容的標(biāo)簽,從SourceForge的訪問(wèn)量來(lái)看,它是很活躍的項(xiàng)目,僅次于Ant、Hibernate、Xdoclet等幾個(gè)著名的項(xiàng)目,我總結(jié),它的主要功能有4項(xiàng):顯示、分頁(yè)、排序、將顯示的數(shù)據(jù)寫(xiě)入指定類型的文件中,然后下載。
1. 據(jù)我使用的情況看,我只使用了分頁(yè)和顯示的功能,因?yàn)楫?dāng)時(shí)我沒(méi)有很好的解決中文編碼的問(wèn)題,所以排序會(huì)有問(wèn)題,直到昨天,我在朋友的幫助下解決了這個(gè)問(wèn)題,至此我可以放心使用的功能又增加了排序(我昨天簡(jiǎn)單的測(cè)試了一下是可以的)。
2. 但對(duì)于將顯示的內(nèi)容生成到一個(gè)指定格式的文件中的功能卻有著很多缺陷,如:
(1) 生成的文件中只有顯示的數(shù)據(jù),那些沒(méi)有顯示在界面上的的數(shù)據(jù),則不會(huì)被寫(xiě)到文件中。
(2) 如果修改了DisplayTag的顯示的內(nèi)容,比如添加一列,在這列中的內(nèi)容不是字符,而是HTML的標(biāo)簽,則生成的文件只有這些HTML標(biāo)簽,而沒(méi)有數(shù)據(jù)。
(3) 即使DisplayTag中沒(méi)有我們定制的HTML腳本,生成的文件偶爾也有問(wèn)題,比如:它會(huì)把“007”生成為“7”,把字符串自動(dòng)的轉(zhuǎn)換為整型值。有時(shí)候還生成空白內(nèi)容的文件。
(4) DisplayTag生成的Excel文件兼容性不好,有時(shí)在Excel2003中不能正常打開(kāi),或者在XP下打開(kāi)報(bào)錯(cuò)。
后來(lái),我看了作者寫(xiě)的《Spring Live》,書(shū)中說(shuō)如果想實(shí)現(xiàn)穩(wěn)定的Excel,推薦使用POI,于是我使用POI生成Excel,穩(wěn)定性和兼容性都不錯(cuò)。
六.DBUnit
DBUnit是一個(gè)可以被Ant集成的向數(shù)據(jù)庫(kù)中添加數(shù)據(jù)和備份數(shù)據(jù)的一個(gè)類庫(kù),配置很方便,因?yàn)锳ppFuse已經(jīng)集成好了,所以使用也很容易。
但是如果你使用EditPlus之類的工具手工修改了AppFuse生成的內(nèi)容,則執(zhí)行Ant的setup、setup-db或者deploy的任務(wù)時(shí),常常報(bào)錯(cuò),說(shuō)無(wú)效的格式,這是因?yàn)檫@個(gè)被手工修改的文件再次被AppFuse執(zhí)行后,它的第一行的文件聲明的前幾個(gè)字母是無(wú)效的,是因?yàn)楸镜氐淖址幋a的原因而引起了亂碼,如果把這幾個(gè)無(wú)效的字母去掉,問(wèn)題就解決了。
七.Struts Menu
Struts Menu也是AppFuse的作者開(kāi)發(fā)的一個(gè)開(kāi)源軟件,它可以根據(jù)配置文件讀取當(dāng)前用戶可以使用的功能菜單,這個(gè)功能是我一直以來(lái)都想要的,我也找到了一些代碼,但實(shí)現(xiàn)的都不如這個(gè)完善,沒(méi)什么好說(shuō)的,使用簡(jiǎn)單,配置容易,很好的解決了我的問(wèn)題。
問(wèn)題是我只使用了AppFuse提供的2個(gè)角色,對(duì)于多個(gè)角色的實(shí)驗(yàn)我還沒(méi)有做。
八.XDoclet
在AppFuse中,使用Xdoclet生成了幾乎一切的配置文件:Struts-config.xml、web.xml、validation.xml、*.hbm.xml等文件,如果使用AppGen的話,還會(huì)生成更多的文件,這一切都是使用Xdoclet實(shí)現(xiàn)的。
問(wèn)題是我在Struts部分提到的,生成的Validation.xml文件中會(huì)多生成一個(gè)“.”,另外在生成資源文件時(shí)也會(huì)多生成一個(gè)“.”,目前我沒(méi)有很好的閱讀這段代碼,不知道是不是Xdoclet的問(wèn)題。
九.Ant
Ant并沒(méi)有什么問(wèn)題,但在執(zhí)行作者寫(xiě)的Ant任務(wù)的時(shí)候,有一些任務(wù)不能正常執(zhí)行,比如,運(yùn)行模擬對(duì)象測(cè)試的任務(wù),作者也在1.7版本的修復(fù)列表中提到以前版本有些ant任務(wù)不能執(zhí)行,在1.7中修改了一些ant任務(wù),使他們能夠正常的執(zhí)行了。
實(shí)際上,我們?nèi)绻褂肁ppGen進(jìn)行開(kāi)發(fā)的話,使用的任務(wù)一般不超過(guò)8個(gè)。
十.JSTL
JSTL 是個(gè)好東西,我常用的有<c:>和<fmt:>部分的標(biāo)簽,但是如果使用JSTL進(jìn)行邏輯判斷,我并沒(méi)有感覺(jué)比使用JSP的代碼塊優(yōu)雅多少。另外,熟悉JSTL也需要一段時(shí)間,我就經(jīng)歷了面對(duì)著JSP頁(yè)面不知道該怎么寫(xiě)JSTL語(yǔ)法的困境。當(dāng)然,AppFuse中使用的基本都是 JSTL,包括向DisplayTag傳遞顯示的數(shù)據(jù),使用的都是JSTL語(yǔ)法,這方面的資料挺多,我參考的是電子工業(yè)出版社出的《JSP2.0技術(shù)》,說(shuō)的很詳細(xì)。
十一.Tomcat
你也許會(huì)說(shuō):“Tomcat就不用說(shuō)了吧?”,是的,Tomcat一般都會(huì)使用,但是 ―――――――――――――Tomcat5和Tomcat4.X對(duì)于中文編碼使用了不同的機(jī)制,這個(gè)問(wèn)題困擾了我好久,我解決了頁(yè)面上寫(xiě)入漢字顯示亂碼的問(wèn)題,我也曾經(jīng)以為DisplayTag對(duì)漢字不能排序,也不能正常分頁(yè)是因?yàn)镈isplayTag的開(kāi)發(fā)者都是老外,是因?yàn)樗麄儧](méi)有考慮中文的關(guān)系的原因。
直到昨天,我才知道這一切都是因?yàn)門omcat5對(duì)漢字編碼的實(shí)現(xiàn)的方式和Tomcat4不一樣的原因,如果感興趣,可以看看這個(gè)帖子: http://www.javaworld.com.tw/jute/post/view?bid=9&id=44042&sty=1&tpg=1&age=0
十二.JavaScript
JavaScript簡(jiǎn)單易學(xué),但想運(yùn)用自如就不太容易了。AppFuse中嵌入了幾個(gè)js文件,里面包含了許多函數(shù),值得我們好好的研究一下,比如,如果有一個(gè)必填字段沒(méi)有填寫(xiě),AppFuse會(huì)自動(dòng)的聚焦在那個(gè)input上,類似的小技巧有很多,你可以自己去翻看。
但AppFuse 自帶的JavaScript腳本有一個(gè)Bug,就是當(dāng)DisplatyTag中沒(méi)有可以顯示的數(shù)據(jù)時(shí),你用鼠標(biāo)單擊,它會(huì)報(bào)JavaScript錯(cuò)誤,你仔細(xì)研究一下function highlightTableRows(tableId) 就知道了:我的解決辦法是在location.href = link.getAttribute("href");前面添加一行判斷:if (link != null)。
十三.資源文件國(guó)際化
對(duì)于Struts和DisplayTag都涉及到資源文件國(guó)際化AppFuse1.6.1很好的解決了Struts資源映射文件國(guó)際化的問(wèn)題,你只需要在對(duì)應(yīng)本國(guó)語(yǔ)言的資源文件中寫(xiě)入漢字,Ant中有一項(xiàng)執(zhí)行native2ascii的任務(wù),AppFuse自動(dòng)的為你進(jìn)行了資源文件的編碼轉(zhuǎn)換,而對(duì)于 DisplayTag的資源文件問(wèn)題,還要自己執(zhí)行native2ascii命令,為了避免每次都輸入一串命令,我用Delphi寫(xiě)了個(gè)小工具,可視化的選擇資源文件,點(diǎn)擊按鈕自動(dòng)執(zhí)行該命令,底層依賴于JDK。
經(jīng)過(guò)2個(gè)多月的學(xué)習(xí),我感覺(jué)這個(gè)框架非常不錯(cuò),它為我以后的項(xiàng)目開(kāi)發(fā)指出了一個(gè)新的方向,但如果想很熟練的使用這個(gè)框架進(jìn)行開(kāi)發(fā),至少要對(duì)以下幾種技術(shù)比較熟練:Struts(或者WebWork、Spring及其他的已經(jīng)整合進(jìn)來(lái)的MVC框架)、Hibernate(或者ibatis)、JSTL,當(dāng)然其他的技術(shù)至少也要知道一點(diǎn),否則遇到問(wèn)題都不知道出在哪里。
目前我還沒(méi)有解決的問(wèn)題有:
1. 如何在翻頁(yè)的時(shí)候才讀取下面的數(shù)據(jù)?
2. 怎樣對(duì)使用同一個(gè)FormBean的多個(gè)Form進(jìn)行客戶端校驗(yàn)?
3. 怎樣優(yōu)化Hibernate的效率?《Hibernate In Action》中提供了多種策略,有些時(shí)候應(yīng)該使用lazy,有些時(shí)候應(yīng)該使用outer-join。
4.在什么時(shí)機(jī)生成導(dǎo)出文件?目前我是在查詢的Action中同時(shí)生成了導(dǎo)出文件,否則,到了下一頁(yè),我就不知道查詢條件了,當(dāng)然,如果把拼裝后的HQL存儲(chǔ)在Session或者Hidden中也可以解決這個(gè)問(wèn)題,但是這樣就破壞了DAO的封裝,要把DAO封裝后的HQL發(fā)送給Action,然后發(fā)送的到 Web界面層,所以目前我還在猶豫生成導(dǎo)出文件的時(shí)機(jī)選擇在哪里?
5. 什么時(shí)候應(yīng)該自己獲取數(shù)據(jù)庫(kù)連接,執(zhí)行native SQL?具體需要注意些什么?
6. SiteMesh的模板優(yōu)化?
7. DisplayTag的底層實(shí)現(xiàn)?
每個(gè)問(wèn)題都比較棘手,要一個(gè)一個(gè)解決!
這個(gè)框架的優(yōu)點(diǎn)是:如果熟悉了開(kāi)發(fā)流程,可以大幅度的提高開(kāi)發(fā)速度,如果業(yè)務(wù)不是很復(fù)雜,使用AppGen可以生成60%左右的代碼,而且程序可維護(hù)性好,因?yàn)樽髡呤褂昧硕鄠€(gè)設(shè)計(jì)模式對(duì)各個(gè)層面進(jìn)行了封裝,所以不同的模塊代碼風(fēng)格出奇的一致,有利于開(kāi)發(fā)人員快速上手,也有利于接收其他開(kāi)發(fā)人員遺留的代碼。
兔八哥
2004-2-3下午15:51
++++++++++++++++++++
引用:
有沒(méi)有成功的項(xiàng)目同我們分享一下?
我已經(jīng)使用AppFuse開(kāi)發(fā)了2個(gè)項(xiàng)目了,都是教育系統(tǒng)的,系統(tǒng)都不大,我一個(gè)人用實(shí)際開(kāi)發(fā)一個(gè)月,因?yàn)槭枪镜捻?xiàng)目,源碼不好外發(fā),但主要的東西都是一樣的,對(duì)于AppFuse我也沒(méi)有修改多少,否則,往新版本移植就會(huì)有問(wèn)題了。
我遇到的問(wèn)題,能想起來(lái)的我都寫(xiě)下來(lái)了,如果有其他的問(wèn)題,我們可以一起討論。
最近我有個(gè)朋友在使用WebWork的AppFuse版本進(jìn)行開(kāi)發(fā),他遇到的問(wèn)題和我基本差不多,有交流才有進(jìn)步,呵呵!
Very Happy
感謝樓上幾位的熱心解答,謝謝!
+++++++++++++++++++++++
引用:
目前我還沒(méi)有解決的問(wèn)題有:
1. 如何在翻頁(yè)的時(shí)候才讀取下面的數(shù)據(jù)?
2. 怎樣對(duì)使用同一個(gè)FormBean的多個(gè)Form進(jìn)行客戶端校驗(yàn)?
3. 怎樣優(yōu)化Hibernate的效率?《Hibernate In Action》中提供了多種策略,有些時(shí)候應(yīng)該使用lazy,有些時(shí)候應(yīng)該使用outer-join。
4.在什么時(shí)機(jī)生成導(dǎo)出文件?目前我是在查詢的Action中同時(shí)生成了導(dǎo)出文件,否則,到了下一頁(yè),我就不知道查詢條件了,當(dāng)然,如果把拼裝后的HQL存儲(chǔ)在Session或者Hidden中也可以解決這個(gè)問(wèn)題,但是這樣就破壞了DAO的封裝,要把DAO封裝后的HQL發(fā)送給Action,然后發(fā)送的到 Web界面層,所以目前我還在猶豫生成導(dǎo)出文件的時(shí)機(jī)選擇在哪里?
5. 什么時(shí)候應(yīng)該自己獲取數(shù)據(jù)庫(kù)連接,執(zhí)行native SQL?具體需要注意些什么?
6. SiteMesh的模板優(yōu)化?
7. DisplayTag的底層實(shí)現(xiàn)?
1.關(guān)于翻頁(yè)的問(wèn)題,如果你剛開(kāi)始使用AppFuse開(kāi)發(fā)的話,推薦使用valuelist,它可以和Hibernate很好的集成,我的一個(gè)網(wǎng)友用的就是這個(gè)東西,雖然界面沒(méi)有DisplayTag漂亮,但關(guān)于分頁(yè)卻不用你操太多的心,
因?yàn)檫@幾天天天開(kāi)會(huì),所以也沒(méi)有做些技術(shù)實(shí)驗(yàn),另一個(gè)朋友告訴我有一個(gè)老外把DisplayTag分頁(yè)部分修改了,在JIRA上有源碼下載,我下來(lái)了,還沒(méi)有看,還有一個(gè)思路,就是分析DisplayTag的分頁(yè)的格式,然后用Filter解析,然后把當(dāng)前頁(yè)號(hào)傳入DAO,然后使用標(biāo)準(zhǔn)查詢進(jìn)行查詢分頁(yè),但要對(duì)AppFuse的接口和方法添加參數(shù),正在猶豫中,還有更簡(jiǎn)單的方法,直接在Session中放入當(dāng)前的頁(yè)號(hào),每次都刷新,就不用Filter了,然后同樣修改方法和接口。
2.對(duì)于Struts的使用同一個(gè)FormBean的多個(gè)Form進(jìn)行客戶端校驗(yàn),在孫衛(wèi)琴的Struts的書(shū)中已經(jīng)提到了,即使她的方法不管用,也可以手寫(xiě)JavaScript來(lái)解決,只是我不愿意而已,如果別無(wú)他法,則只能如此了。
3. 優(yōu)化Hibernate的效率,其實(shí)對(duì)我的程序來(lái)說(shuō)問(wèn)題不大,我的表比較少,基本只有3層的級(jí)聯(lián),而且對(duì)于數(shù)據(jù)字典和業(yè)務(wù)表之間的關(guān)聯(lián),我采用的是業(yè)務(wù)表到數(shù)據(jù)字典表的many-to-one,這樣的單向關(guān)聯(lián)比較簡(jiǎn)單,也能夠滿足我的要求,性能會(huì)好一點(diǎn)點(diǎn),再加上分頁(yè)功能,只查詢當(dāng)前也內(nèi)容,然后參考《Hibernate In Action》的第七章的內(nèi)容,提高接收效率應(yīng)該是沒(méi)有問(wèn)題的。
4.關(guān)于到處文件的時(shí)機(jī),我正在看關(guān)于模式的書(shū)籍,正在找答案,其實(shí)還有個(gè)簡(jiǎn)單的辦法,就是把生成導(dǎo)出文件單獨(dú)的實(shí)現(xiàn),用戶點(diǎn)擊按鈕才生產(chǎn),當(dāng)然這樣就要把用戶的查詢條件記下來(lái),當(dāng)然也涉及到修改接口和方法了,AppFuse中,修改接口和方法很麻煩,如果代碼生成后再修改,要改動(dòng)很多處,所以前期設(shè)計(jì)很重要。
5.關(guān)于這一點(diǎn),我一直在找一個(gè)硬性的標(biāo)準(zhǔn),比如關(guān)聯(lián)表超過(guò)多少個(gè)等等條件就應(yīng)該自己獲取數(shù)據(jù)庫(kù)連接,但現(xiàn)在看來(lái)這也不是絕對(duì)的,如果能夠大幅度提高效率,或者使用 native SQL可以減少工作量或者節(jié)省時(shí)間的話,那就可以使用,只是要對(duì)這種方式的利弊要有所了解,不幸的是,我還沒(méi)有這樣試過(guò),試過(guò)的朋友請(qǐng)?zhí)峁┬┙ㄗh,謝謝!
6.SiteMesh的優(yōu)化,我看到一片文章,也是個(gè)老外寫(xiě)的,忘了出處,說(shuō)SiteMesh對(duì)性能影響不大,可以放心使用,那我就暫時(shí)不考慮它了,呵呵。
7.DisplayTag的底層的原理我早就知道,而且它的文檔的流程圖也有,只是我需要知道更詳細(xì)的實(shí)現(xiàn)細(xì)節(jié),最近在讀源碼,應(yīng)該很快就有結(jié)果了,如果我有好消息,會(huì)來(lái)這里把解決方案貼出來(lái)。
上面的文字只是我目前的一些思路,因?yàn)樘焯扉_(kāi)會(huì),也沒(méi)有做技術(shù)實(shí)驗(yàn),還不知道可行的程度,但我想應(yīng)該都可以實(shí)現(xiàn),我只不過(guò)是在找更好的辦法,如果你有任何好的思路或者建議,請(qǐng)不吝告知,謝謝,任何建議和意見(jiàn)都是受歡迎的,只是要詳細(xì)些,不要拿些空洞的模式來(lái)敷衍我,呵呵,目前這樣的“高手”不少,我有些受夠了,呵呵
本文來(lái)自CSDN博客,轉(zhuǎn)載請(qǐng)標(biāo)明出處:http://blog.csdn.net/changzhang/archive/2008/03/12/2172675.aspx