本文主要講解J-hi中樹的過濾。以員工部門樹為例。
要求在點擊某個員工時,能夠查看到該員工所在的部門。

圖1-部門樹
下圖2是所有員工列表:
圖-2
當點擊王五時,顯示王五所在的部門結構樹如圖3。
圖-3
主要代碼部分:
1、Jsp超鏈接代碼:
<a
href="tree.action?menuName=orgList&orgId=${item.org.id}" target="dialog">${item.org.orgName}</a>
注意:orgId是動態傳入的參數,這里指該員工所在的部門編號。
2、在himenu-config.xml中配置部門樹的后面加上這么一段
<void property="filter">
<string>org.cis.filter.orgCollectionProcessor</string>
</void>
注意:string標簽內的是寫過濾數據的類。對樹的數據進行過濾,提供兩種接口方式對數據進行過濾 MenuFilterProcessor 在獲取數據之前填加過濾器;MenuCollectionProcessor 在獲取數據之后再對數據做整理.具體方法查看java-doc的API。
而例子的orgCollectionProcessor類代碼:
public class orgCollectionProcessor implements MenuCollectionProcessor {
public Collection getCollection(Collection coll, Map<String, String> map) {
// TODO Auto-generated method stub
//coll - 當前節點下一級節點的數據集合
//map 動態的傳入數據,以map的形式
//傳入一個員工的所在的部門Id,返回該員工所在的部門結構樹
int orgId=Integer.parseInt(map.get("orgId").toString());
for (Iterator iterator = coll.iterator(); iterator.hasNext();) {
Object obj = (Object) iterator.next();
if(obj instanceof HiOrg){
HiOrg hiorg = (HiOrg)obj;
if(hiorg.getId()!=orgId) {
iterator.remove();
coll.remove(obj);
}
}
}
return coll;
}
}
注:該文檔由J-Hi愛好者"無可"提供,他的QQ號為924372739,歡迎大家與他在技術上多多交流