努力打造一個(gè)創(chuàng)意的開(kāi)源JSF組件包——Tcoco
花了幾天時(shí)間又為我的Tcoco組件包增加了兩個(gè)新的組件: HtmlLinkage 、HtmlAjaxMess想要努力打造一個(gè)創(chuàng)意的開(kāi)源JSF組件包,如果有人幫忙貢獻(xiàn)一些代碼、組件或者提供一些建議的話,非常感謝!
HtmlLinkage : 實(shí)現(xiàn)了一個(gè)雙聯(lián)動(dòng)下拉框。
HtmlAjaxMess : 實(shí)現(xiàn)酷酷的站內(nèi)信功能。
組件測(cè)試地址:http://www.tbuy.biz/tbuy/test.faces

以下是組件的使用方法(先簡(jiǎn)單配置好過(guò)濾器及引入taglib標(biāo)簽)
----------------------------------------------------------------- HtmlLinkage
實(shí)現(xiàn)雙聯(lián)動(dòng)的下拉框選單,所有javascript都封裝在組件里面,使用者完全可以不理會(huì)javascript,只要簡(jiǎn)單綁定屬性即可。
<h:form>
<coco:linkage param1="#{TestBean.param1}" ------- 選項(xiàng)1,綁定于后臺(tái)bean的String類型</h:form>
param2="#{TestBean.param2}" ---------------------- 選項(xiàng)2,同上.
obj="#{TestBean.obj}"> --------------------------- 所有的選擇類型(Map類型)
</coco:linkage>
屬性說(shuō)明(以下屬性都支持表達(dá)式綁定):
param1: 這個(gè)屬性主要用于接收所選擇的第一個(gè)值(即第一個(gè)select所選的值),綁定于后臺(tái)bean的String屬性
param2: 這個(gè)屬性主要用于接收所選擇的第二個(gè)值(即第二個(gè)select所選的值),綁定于后臺(tái)bean的String屬性
obj: 這個(gè)是所有的可選擇類型,包含了第一維及第二維,綁定于后臺(tái)Bean的Map類型即可,如下:
簡(jiǎn)單的使用方法
private Map<String, List<String>> obj;
public Map<String, List<String>> getObj() {
if (obj == null) {}
obj = new HashMap<String, List<String>>();}
List<String> aa = new ArrayList<String>();// 第一組選單
aa.add("aa_1");
aa.add("aa_2");
aa.add("aa_3");
List<String> bb = new ArrayList<String>();// 第二組選單
bb.add("bb_1");
bb.add("bb_2");
bb.add("bb_3");
List<String> cc = new ArrayList<String>();// 第三組選單
cc.add("cc_1");
cc.add("cc_2");
cc.add("cc_3");
obj .put("aa", aa);// 將以上幾組選單放入obj中,在組件的encode中會(huì)自動(dòng)分析并處理這些數(shù)據(jù)
obj .put("bb", bb);
obj .put("cc", cc);
return obj;
obj也可以是以下的Map類型,這樣可以將Select中的option的value與label區(qū)分開(kāi)來(lái).
public Map<String[], List<String[]>> getObj() {
if (obj == null) {}
obj= new HashMap<String[], List<String[]>>();}
String[] ee = new String[]{"ee", "EE"}; // 第一組選單
List<String[]> eeList = new ArrayList<String[]>();
eeList.add(new String[]{"ee_1", "EE_1"});
eeList.add(new String[]{"ee_2", "EE_2"});
eeList.add(new String[]{"ee_3", "EE_3"});
String[] ff = new String[]{"ff", "FF"}; 第二組選單
List<String[]> ffList = new ArrayList<String[]>();
ffList.add(new String[]{"ff_1", "FF_1"});
ffList.add(new String[]{"ff_2", "FF_2"});
ffList.add(new String[]{"ff_3", "FF_3"});
String[] gg = new String[]{"gg", "GG"}; 第三組選單
List<String[]> ggList = new ArrayList<String[]>();
ggList.add(new String[]{"gg_1", "GG_1"});
ggList.add(new String[]{"gg_2", "GG_2"});
ggList.add(new String[]{"gg_3", "GG_3"});
obj.put(ee, eeList);
obj.put(ff, ffList);
obj.put(gg, ggList);
return obj;
----------------------------------------------------------------- HtmlAjaxMess
這個(gè)組件的使用更簡(jiǎn)單,只是不太通用而已,使用了Ajax功能,實(shí)現(xiàn)了很酷很生動(dòng)的效果,或者花俏了一點(diǎn),仍然是將代碼完全封裝在了組件中,使用者可以完全不用理會(huì)javascript.“JSF與AJAX是天作之合”這句話一點(diǎn)都不假。
<h:form>
<coco:ajaxMess process="#{mess_send.quickSend}" label="站內(nèi)信"/></h:form>
屬性說(shuō)明(以下屬性都支持表達(dá)式綁定):
label: 顯示于頁(yè)面中的標(biāo)簽而已,綁定于后臺(tái)bean的String類型.
process :這個(gè)屬性綁定到了后臺(tái)bean的一個(gè)方法中,該方法需要接受3個(gè)參數(shù),(即:一個(gè)目標(biāo)用戶ID,一個(gè)消息標(biāo)題,一個(gè)消息主體內(nèi)容),即是該組件會(huì)給所綁定的后臺(tái)bean方法中傳遞三個(gè)數(shù)據(jù),所以并不算通用,不過(guò)還是可以輕松定制的,process所綁定的后臺(tái)方法可以像是這樣的:
public String quickSend(String title, String toId, String content) {
// 檢查登錄}
String sender = null;
if (!getVisitor().isLogin()) {
sender = "GUEST:" + getVisitor().getIp();} else {
sender = getVisitor().getUser().getId();}
// 檢查空值
if ("".equals(title) || "".equals(toId) || "".equals(content)) {
return "failure:錯(cuò)誤,缺少必填項(xiàng)!";}
// .檢查用戶是否存在
if (!UserAction.isExistUserId(toId)) {
return "failure:錯(cuò)誤,目標(biāo)用戶(ID)不存在!";}
// 發(fā)送站內(nèi)信
MessageModel message = new MessageModel();
message.setBeRead(false);
message.setContent(content);
message.setFromUser(sender);
message.setTitle(title);
message.setToUser(toId);
MessageAction.addMessage(message);
return Constants.OUT_SUCCESS;
// 因?yàn)榻M件的代碼太長(zhǎng),隨后再發(fā)布組件的源代碼。
- huliqing@huliqing.name
- http://www.huliqing.name
posted on 2008-03-06 17:50 huliqing 閱讀(2323) 評(píng)論(3) 編輯 收藏 所屬分類: JSF