隨筆-112  評(píng)論-73  文章-0  trackbacks-0

          這兩天項(xiàng)目進(jìn)行了到了菜單組件的開(kāi)發(fā).把能使用的JSF的Tree組件都翻了個(gè)遍,試了個(gè)遍.沒(méi)有中意的.要不是太復(fù)雜就是太難用.(好象差不多一個(gè)意思^_^).最后決定自己開(kāi)發(fā)一個(gè)Tree組件.

          有如下功能:

          1、數(shù)據(jù)要能夠與bean聯(lián)系起來(lái),因?yàn)椴藛问莿?dòng)態(tài)的從數(shù)據(jù)庫(kù)里取出來(lái)或動(dòng)態(tài)生成的;

          2、要無(wú)限級(jí)次的(其實(shí)有點(diǎn)變態(tài),那有那么層次的菜單);

          3、要是DIV+CSS的,不要table的(這么多大的、知名的JSF組件為什么都是table布局呢?難道他們和我一樣不會(huì)用DIV?^_^)

          ...

          在網(wǎng)上一找,有一個(gè)DIV+CSS的tree組件出現(xiàn)了。在 http://cnlei.iecn.net/ 

          下來(lái)源碼一看很清晰。連我這不懂CSS的也看得明白了一大半。決定就對(duì)它進(jìn)行改造。生成JSF的組件。

          在開(kāi)發(fā)的過(guò)程中有一些要記錄的:

          1、JSF1.2的組件開(kāi)發(fā)和JSF1.1有的很大的不同。尤其是EL表達(dá)式。而且是extends的基類(lèi)也不同。

          JSF1.2中的TagLib要繼承javax.faces.webapp.UIComponentELTag。


          2、TagLib接受的屬性只能是ValueExpression類(lèi)型。如果需要用字符型。需要再進(jìn)行處理。不象JSF1.1中有方法判斷是表達(dá)式還是值。

          接受表達(dá)的值,并給組件賦值:

          private ValueExpression value;

          ...

            if (value != null)
             component.setValueExpression("value", value);
          如果要接受字符串的屬性要這樣得到字符串的值。

            if (id != null) {
             component.setId(id.getExpressionString());
            }


          3、如果想把組件在Facelets中應(yīng)用,要寫(xiě)Renderer。(至少我是這樣,不寫(xiě)Renderer在Facelets中就不能應(yīng)用。但在JSP中可以使用)還要寫(xiě)一個(gè)componets.tablib.xml。

          在Renderer中得到表達(dá)式的值:

          ValueExpression valueVe = component.getValueExpression("value");
            if (valueVe != null) {
             Object _object = valueVe.getValue(context.getELContext());

          //...
          }

          4、要在faces-config.xml中配置component 和render-kit.


          總之寫(xiě)JSF的組件是很麻煩的事情。如果有其他的選擇還是不要自己寫(xiě)。但是寫(xiě)好之后用起卻是非常的方便的。

          <xy:tree value="#{menuBean.nodes}" title="#{resource.menu_title}"/>

          一句話(huà)就可以生成一樹(shù)。很爽吧!


           



          附源碼(Eclipse 工程) 下載源碼

          源碼中沒(méi)有相關(guān)jar 包,加在一起太大了沒(méi)辦法上傳。用到的jar包如下:
          commons-beanutils.jar
          commons-codec.jar
          commons-collections.jar
          commons-digester.jar
          commons-el.jar
          commons-fileupload.jar
          commons-lang.jar
          commons-logging.jar
          commons-validator.jar
          jakarta-oro.jar
          javaee.jar
          jsf-api.jar
          jsf-impl.jar
          jstl-1.2.jar
          jstl.jar
          log4j-1.2.8.jar
          如果有沒(méi)辦法找到可以給我發(fā)Email:wfn_libo # 163.com
          posted on 2007-08-11 19:43 Libo 閱讀(2216) 評(píng)論(4)  編輯  收藏 所屬分類(lèi): JavaServer Faces

          評(píng)論:
          # re: JSF1.2組件 基于DIV+CSS的Tree[未登錄](méi) 2007-08-13 11:50 | wzjin
          建議代碼共享!  回復(fù)  更多評(píng)論
            
          # re: JSF1.2組件 基于DIV+CSS的Tree 2007-08-16 15:46 | ginkgo
          同意樓上的觀點(diǎn),希望可以看到代碼,對(duì)學(xué)習(xí)有很大的幫助。  回復(fù)  更多評(píng)論
            
          # re: JSF1.2組件 基于DIV+CSS的Tree 2007-08-16 22:41 | 魚(yú)腸劍
          現(xiàn)在還在項(xiàng)目中應(yīng)用.并沒(méi)有獨(dú)立出來(lái).過(guò)一段時(shí)間充裕一些把它獨(dú)立出來(lái).有什么建議可以EMAIL :wfn_libo@163.com  回復(fù)  更多評(píng)論
            
          # re: JSF1.2組件 基于DIV+CSS的Tree 更新源碼 2009-02-06 16:33 | Libo
          感謝大家的關(guān)注?,F(xiàn)在才附上源碼,有點(diǎn)晚啊 ! 呵。。  回復(fù)  更多評(píng)論
            
          主站蜘蛛池模板: 东阿县| 邳州市| 丰镇市| 佛山市| 闻喜县| 泊头市| 定襄县| 达州市| 淳化县| 定安县| 石台县| 安仁县| 洛扎县| 卢湾区| 沅陵县| 班戈县| 吉木萨尔县| 佛冈县| 行唐县| 武义县| 鹤岗市| 搜索| 布拖县| 綦江县| 清流县| 隆化县| 渭源县| 沂南县| 青冈县| 贞丰县| 巢湖市| 冀州市| 鄢陵县| 西盟| 东源县| 甘泉县| 屯留县| 莒南县| 汶川县| 汕尾市| 温宿县|