📄 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 + -