xloadtree 的使用
XloadTree是http://webfx.eae.net/公司的基于JavaScript的建立樹型目錄的開源產品,擴展性強,使用簡單。
1。XloadTree是基于XmlHttp請求/響應模型,必須使用http協議訪問代碼才可以正確加載XML文件。
2。使用JSP/Servlet的實例如下:
tree.jsp
<%@ page
language="java"
contentType="text/xml; charset=UTF-8"
pageEncoding="UTF-8"
%>
<%
response.setContentType("text/xml");
out.println("<tree>");
out.println("<tree text=\"Load tree1.xml\" src=\"tree1.xml\" />");
out.println("<tree text=\"Loaded Item 1\" action=\"http://webfx.eae.net\" />");
out.println("<tree text=\"Loaded Item 2\">");
out.println("<tree text=\"Loaded Item 2.1\" action=\"javascript:alert(2.1)\" />");
out.println("</tree>");
out.println("<tree text=\"Loaded Item 3 (with target)\" action=\"http://www.google.com\" target=\"_new\" />");
out.println("<tree text=\"Load tree.xml\" src=\"tree.xml\" />");
out.println("</tree>");
%>注意contentType="text/xml; charset=UTF-8" 和response.setContentType("text/xml"),使用的是"text/xml"不是"text/html"。
修改代碼:
<script type="text/javascript">

/// XP Look
webFXTreeConfig.rootIcon = "images/xp/folder.png";
webFXTreeConfig.openRootIcon = "images/xp/openfolder.png";
webFXTreeConfig.folderIcon = "images/xp/folder.png";
webFXTreeConfig.openFolderIcon = "images/xp/openfolder.png";
webFXTreeConfig.fileIcon = "images/xp/file.png";
webFXTreeConfig.lMinusIcon = "images/xp/Lminus.png";
webFXTreeConfig.lPlusIcon = "images/xp/Lplus.png";
webFXTreeConfig.tMinusIcon = "images/xp/Tminus.png";
webFXTreeConfig.tPlusIcon = "images/xp/Tplus.png";
webFXTreeConfig.iIcon = "images/xp/I.png";
webFXTreeConfig.lIcon = "images/xp/L.png";
webFXTreeConfig.tIcon = "images/xp/T.png";

//var tree = new WebFXLoadTree("WebFXLoadTree", "tree1.xml");
//tree.setBehavior("classic");

var rti;
var tree = new WebFXTree("Root");
tree.add(new WebFXTreeItem("Tree Item 1"));
tree.add(new WebFXLoadTreeItem("Tree Item 2", "tree.jsp"));//Loading JSP File
tree.add(rti = new WebFXLoadTreeItem("Tree Item 3 (Reload)", "date.xml.pl"));
tree.add(new WebFXTreeItem("Tree Item 4"));

document.write(tree);

</script>
1。XloadTree是基于XmlHttp請求/響應模型,必須使用http協議訪問代碼才可以正確加載XML文件。
2。使用JSP/Servlet的實例如下:
tree.jsp

















修改代碼:





























最近需要用一個在網頁上顯示一個樹形的結構,原來的javascript腳本不是很適合,就是用了xloadtee,這個東西還是很好用的,
雖然還有一點點瑕疵,但是已經很好的達到了我的要求。
大概需要做的工作:
腳本引用:
<link type="text/css" rel="stylesheet" href="<%=request.getContextPath()%>/js/xtree2.css">
<link type="text/css" rel="stylesheet" href="<%=request.getContextPath()%>/js/xtree2.links.css">
<script type="text/javascript" src="<%=request.getContextPath()%>/js/xtree2.js"></script>
<script type="text/javascript" src="<%=request.getContextPath()%>/js/xloadtree2.js"></script>
<link type="text/css" rel="stylesheet" href="<%=request.getContextPath()%>/js/xtree2.links.css">
<script type="text/javascript" src="<%=request.getContextPath()%>/js/xtree2.js"></script>
<script type="text/javascript" src="<%=request.getContextPath()%>/js/xloadtree2.js"></script>
使用個div在頁面顯示整個樹:
<div style="position: absolute; width: 200px; top: 10px; left: 15px; height: 100%; padding: 5px; overflow: auto;">
<!-- js file containing the tree content, edit this file to alter the menu,
the menu will be inserted where this tag is located in the document -->
<script type="text/javascript">
the menu will be inserted where this tag is located in the document -->
<script type="text/javascript">
var tree = new WebFXTree("組織結構樹");
tree.showRootNode = false;
tree.showRootLines = false;
tree.add(new WebFXLoadTreeItem("系統", "/sectiontree.do"));
tree.expandAll();
tree.write();
</script>
tree.showRootNode = false;
tree.showRootLines = false;
tree.add(new WebFXLoadTreeItem("系統", "/sectiontree.do"));
tree.expandAll();
tree.write();
</script>
</div>
頁面部分即可完成,下面是服務器端的代碼:
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
HttpServletRequest request, HttpServletResponse response)
throws Exception {
response.setContentType("text/xml; charset=gbk");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
PrintWriter out = response.getWriter();
String id = request.getParameter("id");
Session ss = SessionHolder.getSessionHolder().currentSession();
Document doc = new Document(new Element("tree"));
if (id == null) {
// 取得根節點
String root = "select s from Section s inner join fetch s.children where s.parent.section_id is null";
Query query = ss.createQuery(root);
transfer(doc, query);
} else {
// 取得當前節點的id
int sid = Integer.parseInt(id);
String child = " from Section s where s.section_id=:id";
Query query = ss.createQuery(child);
query.setInteger("id", sid);
transfer(doc, query);
}
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
PrintWriter out = response.getWriter();
String id = request.getParameter("id");
Session ss = SessionHolder.getSessionHolder().currentSession();
Document doc = new Document(new Element("tree"));
if (id == null) {
// 取得根節點
String root = "select s from Section s inner join fetch s.children where s.parent.section_id is null";
Query query = ss.createQuery(root);
transfer(doc, query);
} else {
// 取得當前節點的id
int sid = Integer.parseInt(id);
String child = " from Section s where s.section_id=:id";
Query query = ss.createQuery(child);
query.setInteger("id", sid);
transfer(doc, query);
}
SessionHolder.getSessionHolder().closeSession(ss);
Format format = Format.getCompactFormat();
format.setEncoding("gbk");
format.setIndent("/t");
XMLOutputter xout = new XMLOutputter(format);
xout.output(doc, out);
Format format = Format.getCompactFormat();
format.setEncoding("gbk");
format.setIndent("/t");
XMLOutputter xout = new XMLOutputter(format);
xout.output(doc, out);
out.flush();
out.close();
return null;
out.close();
return null;
}
private void transfer(Document doc, Query query) {
List r = query.list();
Section s = (Section) HibernateUtil.uniqueResult(r);
List r = query.list();
Section s = (Section) HibernateUtil.uniqueResult(r);
for (Iterator it = s.getChildren().iterator(); it.hasNext();) {
Section one = (Section) it.next();
Element tree = doc.getRootElement();
Element inner = new Element("tree").setAttribute("text", one
.getName());
tree.addContent(inner);
if (!one.isLast())
inner.setAttribute("src", "/TechCS/sectiontree.do?id="
+ one.getSection_id());
Section one = (Section) it.next();
Element tree = doc.getRootElement();
Element inner = new Element("tree").setAttribute("text", one
.getName());
tree.addContent(inner);
if (!one.isLast())
inner.setAttribute("src", "/TechCS/sectiontree.do?id="
+ one.getSection_id());
inner.setAttribute("action", "javascript:setsection("
+ one.getSection_id() + ")");
}
}
+ one.getSection_id() + ")");
}
}
以上部分就可以完成樹結構的服務器部分。
說明:使用struts+hibernate。