JSF結(jié)合Richfaces使用時(shí)的一種數(shù)據(jù)庫分頁方式
摘要: 在JSF和Richfaces的官方示例里面沒發(fā)現(xiàn)正經(jīng)的數(shù)據(jù)庫分頁示例,于是自己輪了一個(gè),還算比較滿意,分享出來。
struts等框架,視圖(jsp、freemarker等)直接獲取action中準(zhǔn)備好的數(shù)據(jù)結(jié)果集合,請(qǐng)求下一頁數(shù)據(jù)的時(shí)候,同樣后臺(tái)action處理請(qǐng)求,把a(bǔ)ction中的數(shù)據(jù)集合用新的這一頁數(shù)據(jù)替換掉,然后渲染頁面,從而實(shí)現(xiàn)分頁。每次請(qǐng)求action的處理過程可以拿到頁號(hào)等信息,所以在action調(diào)用service的時(shí)候就可以使用這些信息,調(diào)用相應(yīng)的方法做分頁數(shù)據(jù)查詢。
JSF結(jié)合Richfaces做這個(gè)事情和Struts等框架有有很大的區(qū)別。
閱讀全文
Hazelcast作為hibernate緩存和業(yè)務(wù)緩存
摘要: 做去皮兒網(wǎng)(http://www.qupier.com),內(nèi)容管理是一個(gè)系統(tǒng),前端網(wǎng)站是一個(gè)系統(tǒng),這兩個(gè)系統(tǒng)之間獨(dú)立部署,但是緩存要能夠互通。例如后臺(tái)修改了某個(gè)消息類型的說明,在前段網(wǎng)站上要能夠展現(xiàn)出來(使用了hibernate的查詢緩存)。其他的一些場(chǎng)景也許要緩存,例如網(wǎng)站的shiro權(quán)限信息緩存,不過這個(gè)不需要和后端系統(tǒng)互通。但是既然開搞,也不好意思再掛著ehcache。于是一并升級(jí)。
前面一篇日志各種碰壁后,終于找到了理論上能夠?qū)崿F(xiàn)功能的兩個(gè)產(chǎn)品:gemfire和hazelcast。于是,開始嘗試。
閱讀全文
找集中式緩存做hibernate second level cache和業(yè)務(wù)緩存,失敗
摘要: 依然,先發(fā)廣告:去皮兒網(wǎng)(http://www.qupier.com),每月26日通知你是否中簽。已經(jīng)推出廣州的搖號(hào)結(jié)果通知了。
之前做業(yè)務(wù)系統(tǒng),緩存用的是ehcache,集群的時(shí)候用multicast廣播通知。隨著節(jié)點(diǎn)的增多,希望把整個(gè)緩存切換到集中式緩存上來。折騰了兩天,各種碰壁。
閱讀全文
基于Spring實(shí)現(xiàn)seam形式的事件機(jī)制
摘要: 照例先做廣告:去皮兒網(wǎng)(http://www.qupier.com),每月26日通知你是否中簽。很快要退出廣州的搖號(hào)結(jié)果通知了。
Seam的Events用的很舒服,spring提供的事件機(jī)制太羅嗦,所以起了念頭,著這思路移植一下。最終效果如下:
//發(fā)布事件
Events.instance().fire(eventName,arg1,arg2.);
//發(fā)布異步事件
Events.instance().fireAsynchronous(eventName,arg1,arg2.);
//在事務(wù)中,發(fā)布當(dāng)事務(wù)成功commit時(shí)觸發(fā)的事件
Events.instance().fireOnTransactionSuccess(eventName,arg1,arg2.);
//在事務(wù)中,發(fā)布當(dāng)事務(wù)完成(commit/rollback)時(shí)觸發(fā)的事件
Events.instance().fireOnTransactionCompletion(eventName,arg1,arg2
閱讀全文
建立功能級(jí)別的組件
摘要: 先做個(gè)廣告,去皮兒網(wǎng),可以每月26日通知你是否搖號(hào)中簽。http://www.qupier.com
一直以來,組件一直都建立在技術(shù)的層面上。由于業(yè)務(wù)的復(fù)雜多變,似乎沒有人想著把業(yè)務(wù)部分也做成可重用的組件。
我們團(tuán)隊(duì)在過去的兩年里面在這個(gè)方面做了一些常識(shí),寫出來供網(wǎng)友參考、拍磚。
閱讀全文
走在組件化的路上(七)——JSF的優(yōu)勢(shì)之使用View作用域的Action
摘要: 在以往的應(yīng)用開發(fā)過程中,后端的業(yè)務(wù)組件(Action/Service/Dao),可以被設(shè)置為幾種作用域:request、session、application。我們不可能把與每次請(qǐng)求關(guān)系很強(qiáng)的一些信息(例如某個(gè)列表頁面要列出來的數(shù)據(jù)集合)簡單的放到session里面去,這就導(dǎo)致了每次請(qǐng)求之間的大部分?jǐn)?shù)據(jù)是不可能共享的。使用JSF,我們實(shí)現(xiàn)了一種叫做view的作用域,在不同的請(qǐng)求之間共享信息。
閱讀全文
走在組件化的路上(六)——JSF的優(yōu)勢(shì)之自定義組件與模塊化
摘要: JSF的很多文檔上面說,要建立一個(gè)自定義組件,需要定義繼承自UIComponentBase之類的類,然后寫decode/encode方法等等,一大套內(nèi)容,很復(fù)雜。幸好我們有其他的辦法。其實(shí)定義一個(gè)組件在大多數(shù)情況下是不用去寫這樣的代碼的。本節(jié)的內(nèi)容是一個(gè)選擇true/false兩個(gè)值得下拉框組件。定義一個(gè)這樣的組件需要做如下工作:
閱讀全文
走在組件化的路上(五)——JSF的優(yōu)勢(shì)之從url到頁面r
摘要: 我看到的若干mvc框架在展現(xiàn)一個(gè)包含動(dòng)態(tài)數(shù)據(jù)內(nèi)容的頁面的時(shí)候,都是這樣做的:請(qǐng)求/xx.do,到達(dá)某個(gè)action,執(zhí)行配置好或者根據(jù)url映射到的某個(gè)方法,初始化數(shù)據(jù),放到某個(gè)context里面(例如Request,或者struts用的ognl的context),然后根據(jù)配置或者規(guī)則,forward到某頁面,然后展現(xiàn)。
這樣做的好處是強(qiáng)制性的分離了展現(xiàn)和邏輯,缺點(diǎn)是多了若干配置,不自然。
JSF的路子和asp/php是一樣的,你請(qǐng)求/a.xhtml,那么,ok,加載/a.xhtml文件。例如a.xhtml主體內(nèi)容如下:
閱讀全文
走在組件化的路上(四)——JSF的優(yōu)勢(shì)之了解前端狀態(tài)
摘要: 先補(bǔ)充一下上一篇留下的尾巴:最早看JSF的書的時(shí)候,使用jsp作為頁面,#{xx}這樣的標(biāo)記不能直接寫在頁面里,必須套在一個(gè)標(biāo)記里面(和struts2里面的ognl一樣郁悶)。后來才知道,這是jsp的問題,不是JSF的問題。現(xiàn)在大家都是用facelets作JSF的展現(xiàn),JSF2.0更是把這個(gè)標(biāo)準(zhǔn)化為首選。于是直接在頁面上寫#{someAction.doSth('Hello')},完全OK,頁面加載的時(shí)候會(huì)觸發(fā)調(diào)用該方法。
然后我們?cè)賮砜春蠖酥狼岸擞惺裁吹睦樱?nbsp;
閱讀全文
走在組件化的路上(三)——JSF的優(yōu)勢(shì)之忘記http
摘要: 現(xiàn)在開始說JSF的優(yōu)勢(shì)。一個(gè)一個(gè)的說,最后整理的時(shí)候再分主次吧,現(xiàn)在先就針對(duì)上面的幾個(gè)問題來說。
1.URL到action method
閱讀全文
走在組件化的路上(二)——JSF能夠解決什么問題
摘要: 首先,看看在使用struts等框架做開發(fā)的時(shí)候,遇到的一些問題.
閱讀全文
走在組件化的路上(一)——緣起
摘要: 09年4月我從A公司離職,被同事拉到一個(gè)創(chuàng)業(yè)團(tuán)隊(duì)做網(wǎng)頁游戲,他們當(dāng)時(shí)使用的技術(shù)體系是基于Seam的。而我則是SSH的忠實(shí)用戶,此前一直跟隨江南白衣、appfuse的路線,大大小小也做了一些項(xiàng)目,也自己攢了一堆輪子。花了1年多的時(shí)間在一個(gè)基于元數(shù)據(jù)的基礎(chǔ)框架上面,那時(shí)候我基本上掌握了maven的簡單使用,于是自己做的一些基礎(chǔ)性的東西也都是使用maven來做依賴管理、版本發(fā)布。
閱讀全文