?? e3.tree分享代碼.txt
字號:
2008年5月9號 需要種一顆復選框樹,由于當時對e3還不了解,做了很豬的事.現將具體實現總結如下
軟件環境:jdk1.0+strust+hibernate+spring+e3+tomcat5.5框架
開發工具:eclipse3.2.1 +myeclipse1.5.0GA
頁面JSP,調用對話框 以下是一個循環出來table里一個<TD>
<td align="left"><%=(cmccFunction.getFCataRelate()==0)?cmccFunction.getFMethod()+"<input type=\"checkbox\" name=\"chk\" value=\""+cmccFunction.getFId()+"\" "+isTrue+"/> <input type=\"hidden\" id=\""+cmccFunction.getFId()+"\" name=\"\" value=\"\">":cmccFunction.getFMethod()+"<input type=\"checkbox\" name=\"chk\" value=\""+cmccFunction.getFId()+"\" "+isTrue+"/> <input type=\"hidden\" id=\""+cmccFunction.getFId()+"\" name=\"\" value=\"\" >"+
//----調用對話框
"<div id=\"parentId\" style=\"z-index:1000;position:absolute;display:none; left:100px; width:300px; height:200px;\"><iframe id=\"frameId\" name=\"frameId\" src=\"\"></iframe></div><a href=\"javascript:showCol('"+url+"');\" >選擇范圍</a> "%></td>
//對話框頁面
<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
String funId = session.getAttribute("funId").toString();
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<HTML>
<HEAD>
<link href="<%=path%>/images/style.css" rel="stylesheet" type="text/css" />
<script language="javascript" src="<%=path%>/js/roleProvideManager.js" type="text/javascript"></script>
</HEAD>
<script>
function tovalue(id){//對話框將值傳回主窗體
var val = showSelectedNode();
parent.document.getElementById(id).value=val+"/"+id;
parent.document.getElementById("parentId").style.display="none";
}
</script>
<BODY>
<form name="Tree" action="" method="post">
<table>
<tr>
<td><%=request.getSession().getAttribute("treeScript") %></td> //這里使用的是e3API方式build出來的樹
</tr>
<tr>
<td align="right">
<input name="submitRole" type="button" class="submit1" value="提交" onclick="tovalue(<%=funId%>"/>
</td>
</tr>
</table>
</form>
</BODY>
</HTML>
//SQL DAO
public List getTreeNodes(){
log.debug("attaching clean CmccColumn instance");
try {
List list = getHibernateTemplate().find("select c.CId,c.CParentid,c.CTitle from CmccColumn c");
log.debug("attach successful");
return list;
} catch (RuntimeException re) {
log.error("attach failed", re);
throw re;
}
}
\\ 以下是action 方法來具體實現樹的結構及屬性
public ActionForward selectColumn(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
CmccColumn cmccColumnForm = (CmccColumn) form;// TODO Auto-generated method stub
String funId = (String) request.getParameter("funId");
// 業務數據
List orgs = new ArrayList();
ICmccColumnDAO dao = (ICmccColumnDAO)GetAppContext.getContext("CmccColumnDAOProxy",request);
List list = dao.getTreeNodes(); //在數據庫里得到 查詢結果
CmccColumn cmccColumn ;
CmccColumn cmccCol = new CmccColumn() ;
//這里根目錄設置.寫死了沒有在代碼表里
cmccCol.setCId(Long.parseLong("10000000000001")); // 根節點ID
cmccCol.setCParentid(null);//null說明這個節點是所有的父;
cmccCol.setCTitle("欄目設置"); //名字
orgs.add(cmccCol); // 先加入集合
for(int i = 0;i<list.size();i++){ //遍歷集合 這里我是將list轉成Object對象,然后set到實體BEAN里 然后add到orgs集合里
Object [] cmcc =(Object [])list.get(i);
cmccColumn= new CmccColumn();
cmccColumn.setCId(Long.parseLong(cmcc[0].toString()));
cmccColumn.setCParentid(Long.parseLong(cmcc[1].toString()));
cmccColumn.setCTitle(cmcc[2].toString());
orgs.add(cmccColumn);
}
//規則待定暫不排序,業務解碼器這塊邏輯沒動過..按E3 1.5文檔做就可以了
//業務數據解碼器,從業務數據中分解出id和parentid
UserDataUncoder orgUncoder = new UserDataUncoder(){
public Object getID(Object pUserData) throws UncodeException {
CmccColumn cmccColumn = (CmccColumn)pUserData;
return cmccColumn.getCId();
}
public Object getParentID(Object pUserData) throws UncodeException {
CmccColumn cmccColumn = (CmccColumn)pUserData;
return cmccColumn.getCParentid();
}
};
//Tree模型構造器,用于生成樹模型
AbstractWebTreeModelCreator treeModelCreator =
new AbstractWebTreeModelCreator(){
//該方法負責將業務數據映射到樹型節點
protected Node createNode(Object pUserData, UserDataUncoder pUncoder) {
CmccColumn cmccColumn = (CmccColumn)pUserData;
WebTreeNode result = new WebTreeNode(cmccColumn.getCTitle(), "cmccColumn" + cmccColumn.getCId());//
result.setNodeProperty("checkbox"); //設置節點屬性為checkbox
//action是點擊按紐執行的方法.可以是url,或者javascript函數 action這個不用多說了
// result.setAction("javascript:alert(' " + cmccColumn.getCTitle() + "')");
//result.setAction("javascript:alert(' " + result.getValue() + "')");
//result.setSelected(true);
result.setValue(cmccColumn.getCId().toString()); //設置復選框VALUE
//設置復選框默認選中的代碼
or(int i=0;i<trees.length;i++){
if(!("".equals(trees[i])))
{
if(trees[i].toString().equals(result.getValue().toString())){
result.setSelected(true);
}
}
}
return result;
}
};
treeModelCreator.init(request);
TreeModel treeModel = treeModelCreator.create(orgs,orgUncoder);
TreeDirector director = new DefaultTreeDirector();//構造樹導向器
WebTreeBuilder treeBuilder = new CheckXTreeBuilder();//構造樹Builder 這里new 的是checkbox樹,其它說見1.5文檔資料
treeBuilder.init(request);
director.build(treeModel, treeBuilder);//執行構造
String treeScript = treeBuilder.getTreeScript();//獲取構造樹的腳本
request.getSession().setAttribute("treeScript", treeScript);//保存到request,以便頁面使用
//request.getRequestDispatcher("XTree.jsp").forward(request,response);
request.getSession().setAttribute("funId", funId);
以上就是我的實現過程,其中在給checkbox value賦值的時候,由于對框架還不了解,在result.setvalue()里犯了傻,在黃云煇不嫌棄, 我個人不放棄的精神指引下,也成功的解決了,希望大家不要和我一樣走彎路.特此發貼 有則改正,無則加冕
return mapping.findForward("success");
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -