這兩天項目進行了到了菜單組件的開發.把能使用的JSF的Tree組件都翻了個遍,試了個遍.沒有中意的.要不是太復雜就是太難用.(好象差不多一個意思^_^).最后決定自己開發一個Tree組件.
有如下功能:
1、數據要能夠與bean聯系起來,因為菜單是動態的從數據庫里取出來或動態生成的;
2、要無限級次的(其實有點變態,那有那么層次的菜單);
3、要是DIV+CSS的,不要table的(這么多大的、知名的JSF組件為什么都是table布局呢?難道他們和我一樣不會用DIV?^_^)
...
在網上一找,有一個DIV+CSS的tree組件出現了。在 http://cnlei.iecn.net/
下來源碼一看很清晰。連我這不懂CSS的也看得明白了一大半。決定就對它進行改造。生成JSF的組件。
在開發的過程中有一些要記錄的:
1、JSF1.2的組件開發和JSF1.1有的很大的不同。尤其是EL表達式。而且是extends的基類也不同。
JSF1.2中的TagLib要繼承javax.faces.webapp.UIComponentELTag。
2、TagLib接受的屬性只能是ValueExpression類型。如果需要用字符型。需要再進行處理。不象JSF1.1中有方法判斷是表達式還是值。
接受表達的值,并給組件賦值:
private ValueExpression value;
...
if (value != null)
component.setValueExpression("value",
value);
如果要接受字符串的屬性要這樣得到字符串的值。
if (id != null)
{
component.setId(id.getExpressionString());
}
3、如果想把組件在Facelets中應用,要寫Renderer。(至少我是這樣,不寫Renderer在Facelets中就不能應用。但在JSP中可以使用)還要寫一個componets.tablib.xml。
在Renderer中得到表達式的值:
ValueExpression valueVe = component.getValueExpression("value");
if
(valueVe != null) {
Object _object =
valueVe.getValue(context.getELContext());
//...
}
4、要在faces-config.xml中配置component 和render-kit.
總之寫JSF的組件是很麻煩的事情。如果有其他的選擇還是不要自己寫。但是寫好之后用起卻是非常的方便的。
<xy:tree value="#{menuBean.nodes}"
title="#{resource.menu_title}"/>
一句話就可以生成一樹。很爽吧!
附源碼(Eclipse 工程)
下載源碼
源碼中沒有相關jar 包,加在一起太大了沒辦法上傳。用到的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
如果有沒辦法找到可以給我發Email:wfn_libo # 163.com
posted on 2007-08-11 19:43
Libo 閱讀(2210)
評論(4) 編輯 收藏 所屬分類:
JavaServer Faces