`
jiqimiao
  • 浏览: 58332 次
  • 性别: Icon_minigender_1
  • 来自: 常州
社区版块
存档分类
最新评论

运用ajax技术的树型菜单

 
阅读更多
树型菜单可以说是项目中应用最为广泛的运用。以前无论使用微软控件的树型,还是比较优秀的阿赖树型,都是将数据全部读出,然后再分级显示。这样如果数据量大,那么第一次显示将需要客户等待很长一段时间,降低了客户的体验度。如今使用ajax,事情变得简单了。

此运用参考了《征服web2.0开发技术详解》的例子。

我使用的平台是struts+spring+hibernate,但与ajax打交道的也就是struts。我无法将整个代码贴出来,因此把重要的前台ajax代码贴出来,至于后台的代码就看你自己所使用的技术了。

1、jsp页面

<% @pagelanguage = " java " contentType = " text/html;charset=GB2312 " import = " java.util.*,com.wehave.oa.cecontract.model.TbJyhtflb " %>
< html >
< head >
< title > Inserttitlehere </ title >
< linkrel = " stylesheet " href = " ../css/tree.css " >
<scripttype="text/javascript"src="../js/tree_htfl.js"></script>
<scriptlanguge="javascript">
functionShowDetail(ID,NAME,FLAG)
{
window.parent.right.location
="getContract.go?method=doGetContract&folderID="+ID+"&&folderName="+NAME+"&&flag="+FLAG;
}

</script>
</head>
<bodybgcolor="#F6F9FF">
<tbody>
<tablecellpadding="0"cellspacing="0"width="300">
<divid="load"style="display:none"><imgsrc="../images/tree_loading.gif">Loadingdata..</div>
<ulclass="tree">
<%ListtreeList=(List)request.getAttribute("treefolder");
Iteratorit
=treeList.iterator();
while(it.hasNext()){
out.println(it.next().toString());
}

%>
</table>
</tbody>
</body>
</html>

2、tree_htfl.js 代码
functionshowHide(id)
{
varel
=document.getElementById(id);
varbExpand
=true;
varimages
=el.getElementsByTagName("IMG");
if(images[0].src.indexOf("tree_minus.gif")!=-1)
{
bExpand
=false;
images[
0].src="../images/tree_plus.gif";
}
else{
images[
0].src="../images/tree_minus.gif";
}

varsubs
=el.lastChild;
if(bExpand)
subs.style.display
="block";
else
subs.style.display
="none";
}


functiongetSubTree(id,submitURL)
{
varsubmitURL
=submitURL
postXmlHttp(submitURL,
'parseSubTree("'+id+'")','load("'+id+'")');
}

functionparseSubTree(id)
{
varel
=document.getElementById(id);
varulElmt
=document.createElement("UL");
ulElmt.innerHTML
=_xmlHttpRequestObj.responseText;
el.appendChild(ulElmt);
varimages
=el.getElementsByTagName("IMG");
images[
0].setAttribute("src","../images/tree_minus.gif");
images[
0].setAttribute("onclick",newFunction("showHide('"+id+"')"));
varaTag
=el.getElementsByTagName("A");
aTag[
0].setAttribute("onclick",newFunction("showHide('"+id+"')"));
varloadDiv
=document.getElementById("load");
loadDiv.style.display
="none";
}


functionload(id)
{
varloadDiv
=document.getElementById("load");
loadDiv.style.display
="block";
}


var_postXmlHttpProcessPostChangeCallBack;
var_xmlHttpRequestObj;
var_loadingFunction;

functionpostXmlHttp(submitUrl,callbackFunc,loadFunc)
{
_postXmlHttpProcessPostChangeCallBack
=callbackFunc;
_loadingFunction
=loadFunc;
if(window.createRequest)
{
try{
_xmlHttpRequestObj
=window.createRequest();
_xmlHttpRequestObj.open(
'POST',submitUrl,true);
_xmlHttpRequestObj.onreadystatechange
=postXmlHttpProcessPostChange;
_xmlHttpRequestObj.send();
}

catch(ee){}
}

elseif(window.XMLHttpRequest)
{
_xmlHttpRequestObj
=newXMLHttpRequest();
_xmlHttpRequestObj.overrideMimeType(
'text/xml');
_xmlHttpRequestObj.open(
'POST',submitUrl,true);
_xmlHttpRequestObj.onreadystatechange
=postXmlHttpProcessPostChange;
_xmlHttpRequestObj.send(
"");
}

elseif(window.ActiveXObject)
{
_xmlHttpRequestObj
=newActiveXObject("Microsoft.XMLHTTP");
_xmlHttpRequestObj.open(
'POST',submitUrl,true);
_xmlHttpRequestObj.onreadystatechange
=postXmlHttpProcessPostChange;
_xmlHttpRequestObj.send();
}

}
;

functionpostXmlHttpProcessPostChange()
{
if(_xmlHttpRequestObj.readyState==4)
{
if(_xmlHttpRequestObj.status==200){
setTimeout(_postXmlHttpProcessPostChangeCallBack,
2);
}
else{
alert(_xmlHttpRequestObj.status);
}

}

if(_xmlHttpRequestObj.readyState==1)
{
setTimeout(_loadingFunction,
2);
}

}

3、action代码

/***//**
*展开第一层目录
*/

publicActionForwarddoGetFolderList(
ActionMappingmapping,
ActionFormform,
HttpServletRequestreq,
HttpServletResponseres)
{
Listlist
=treeCatalogService.getChildren("0");
ListTreeFolder
=newArrayList();
Iteratorit
=list.iterator();
while(it.hasNext()){
TbJyhtflbhtfl
=(TbJyhtflb)it.next();
Strings
=treeCatalogService.renderTreeViewAjax(htfl);
TreeFolder.add(s);
}

req.setAttribute(
"treefolder",TreeFolder);
returnmapping.findForward("foldertree");
}


/***//**
*展开下级目录
*/

publicActionForwarddoGetSubFolderList(
ActionMappingmapping,
ActionFormform,
HttpServletRequestreq,
HttpServletResponseres)
{
StringparentID
=req.getParameter("parentID");//获得id的值
if(parentID!=null&&!parentID.equals("")){//如果不为null和空
res.setContentType("text/html;charset=GB2312");
Listlist
=treeCatalogService.getChildren(parentID);
Iteratorit
=list.iterator();
try{
PrintWriterout
=res.getWriter();
while(it.hasNext()){
TbJyhtflbhtfl
=(TbJyhtflb)it.next();
out.println(treeCatalogService.renderTreeViewAjax(htfl));
}

out.close();
}
catch(Exceptione){
e.printStackTrace();
}

}

returnnull;
}

4、service层代码
/***//**
*函数说明:展开目录
*参数说明:目录对象
*返回值:展开目录的HTML代码
*/

publicStringrenderTreeViewAjax(TbJyhtflbhtfl){
StringBuffercontent
=newStringBuffer();
StringID
=htfl.getTbJyhtflbZlId();
StringNAME
=htfl.getTbJyhtflbMc();
StringFLAG
=htfl.getTbJyhtflbLb();
content.append(
"<liid='"+ID+"'>");
if(treeCatalogDAO.canExpand(ID))
content.append(
"<imgsrc=../images/tree_plus.gifonClick=/"getSubTree('"+ID+"')/">");
else
content.append(
"<imgsrc=../images/tree_blank.gif>");
content.append(
"<imgsrc=../images/tree_folder.gif><ahref=/"javascript:ShowDetail('"+ID+"','"+NAME+"','"+FLAG+"')/"");
if(treeCatalogDAO.canExpand(ID)){
StringsubmitURL
="getFolderList.go?method=doGetSubFolderList&parentID="+ID;
content.append(
"onClick=/"getSubTree('"+ID+"',submitURL)/"");
}

content.append(
">"+NAME+"</a>");

content.append(
"</li>");
returncontent.toString();
}

5、tree.css代码:
p{
font
-family:arial;

}

a
{
color:#
000;
font
-family:arial;
font
-size:0.8em;
}


.tree
{
margin:0px;
padding:0px;
}

.treeul
{/**//*子结点*/
margin
-left:20px;/**//*Leftspacing*/
padding
-left:0px;
}

.treeli
{/**//*结点*/
list
-style-type:none;
vertical
-align:middle;

}

.treelia
{/**//*结点连接*/
color:#
000;
text
-decoration:none;
font
-family:arial;
font
-size:0.8em;
padding
-left:2px;
}

代码基本就是这样了,希望对大家有用。
分享到:
评论

相关推荐

    AJAX基础概念、核心技术与典型案例(内涵动态实例)

    程序描述:本章将使用Ajax技术实现动态获取数据的树状菜单。当展开菜单时,自动向服务器发送请求,查询该菜单下的子菜单,并在客户端显示子菜单,而无需刷新整个页面。 /simpleTree.jsp 简单树 /staticTree....

    NetAdvantage_2012V2注册·完整安装包.part07

    NetAdvantage for ASP.NET 是一款强大的Web界面控件包,使所有控件都具有Office2010样式,优化的客户端状态,支持MVC、AJAX,包含了强大的数据表格、图表、日历日程、菜单、树型、Tabs、所见所得的HTML编辑器、...

    NetAdvantage_2012V2注册·完整安装包.part10

    NetAdvantage for ASP.NET 是一款强大的Web界面控件包,使所有控件都具有Office2010样式,优化的客户端状态,支持MVC、AJAX,包含了强大的数据表格、图表、日历日程、菜单、树型、Tabs、所见所得的HTML编辑器、...

    NetAdvantage_2012V2注册·完整安装包.part09

    NetAdvantage for ASP.NET 是一款强大的Web界面控件包,使所有控件都具有Office2010样式,优化的客户端状态,支持MVC、AJAX,包含了强大的数据表格、图表、日历日程、菜单、树型、Tabs、所见所得的HTML编辑器、...

    NetAdvantage_2012V2注册·完整安装包.part14

    NetAdvantage for ASP.NET 是一款强大的Web界面控件包,使所有控件都具有Office2010样式,优化的客户端状态,支持MVC、AJAX,包含了强大的数据表格、图表、日历日程、菜单、树型、Tabs、所见所得的HTML编辑器、...

    NetAdvantage_2012V2注册·完整安装包.part12

    NetAdvantage for ASP.NET 是一款强大的Web界面控件包,使所有控件都具有Office2010样式,优化的客户端状态,支持MVC、AJAX,包含了强大的数据表格、图表、日历日程、菜单、树型、Tabs、所见所得的HTML编辑器、...

    NetAdvantage_2012V2注册·完整安装包.part13

    NetAdvantage for ASP.NET 是一款强大的Web界面控件包,使所有控件都具有Office2010样式,优化的客户端状态,支持MVC、AJAX,包含了强大的数据表格、图表、日历日程、菜单、树型、Tabs、所见所得的HTML编辑器、...

    NetAdvantage_2012V2注册·完整安装包.part04

    NetAdvantage for ASP.NET 是一款强大的Web界面控件包,使所有控件都具有Office2010样式,优化的客户端状态,支持MVC、AJAX,包含了强大的数据表格、图表、日历日程、菜单、树型、Tabs、所见所得的HTML编辑器、...

    NetAdvantage_2012V2注册机·完整安装包.part01

    NetAdvantage for ASP.NET 是一款强大的Web界面控件包,使所有控件都具有Office2010样式,优化的客户端状态,支持MVC、AJAX,包含了强大的数据表格、图表、日历日程、菜单、树型、Tabs、所见所得的HTML编辑器、...

    NetAdvantage_2012V2注册·完整安装包.part16

    NetAdvantage for ASP.NET 是一款强大的Web界面控件包,使所有控件都具有Office2010样式,优化的客户端状态,支持MVC、AJAX,包含了强大的数据表格、图表、日历日程、菜单、树型、Tabs、所见所得的HTML编辑器、...

    NetAdvantage_2012V2注册·完整安装包.part15

    NetAdvantage for ASP.NET 是一款强大的Web界面控件包,使所有控件都具有Office2010样式,优化的客户端状态,支持MVC、AJAX,包含了强大的数据表格、图表、日历日程、菜单、树型、Tabs、所见所得的HTML编辑器、...

    NetAdvantage_2012V2注册·完整安装包.part02

    NetAdvantage for ASP.NET 是一款强大的Web界面控件包,使所有控件都具有Office2010样式,优化的客户端状态,支持MVC、AJAX,包含了强大的数据表格、图表、日历日程、菜单、树型、Tabs、所见所得的HTML编辑器、...

    NetAdvantage_2012V2注册·完整安装包.part03

    NetAdvantage for ASP.NET 是一款强大的Web界面控件包,使所有控件都具有Office2010样式,优化的客户端状态,支持MVC、AJAX,包含了强大的数据表格、图表、日历日程、菜单、树型、Tabs、所见所得的HTML编辑器、...

    NetAdvantage_2012V2注册·完整安装包.part08

    NetAdvantage for ASP.NET 是一款强大的Web界面控件包,使所有控件都具有Office2010样式,优化的客户端状态,支持MVC、AJAX,包含了强大的数据表格、图表、日历日程、菜单、树型、Tabs、所见所得的HTML编辑器、...

    NetAdvantage_2012V2注册·完整安装包.part05

    NetAdvantage for ASP.NET 是一款强大的Web界面控件包,使所有控件都具有Office2010样式,优化的客户端状态,支持MVC、AJAX,包含了强大的数据表格、图表、日历日程、菜单、树型、Tabs、所见所得的HTML编辑器、...

    NetAdvantage_2012V2注册·完整安装包.part06

    NetAdvantage for ASP.NET 是一款强大的Web界面控件包,使所有控件都具有Office2010样式,优化的客户端状态,支持MVC、AJAX,包含了强大的数据表格、图表、日历日程、菜单、树型、Tabs、所见所得的HTML编辑器、...

    NetAdvantage_2012V2注册·完整安装包.part11

    NetAdvantage for ASP.NET 是一款强大的Web界面控件包,使所有控件都具有Office2010样式,优化的客户端状态,支持MVC、AJAX,包含了强大的数据表格、图表、日历日程、菜单、树型、Tabs、所见所得的HTML编辑器、...

    Telerik.Web.UI安装包01

    通过该产品的强大功能,开发者可以开发出功能丰富、适应标准广泛,与交互浏览器兼容的网络应用程序。 r.a.d.ajax - 首个无码AJAX-enabling架构的ASP.NET程序控件 r.a.d.calendar - 一个体积小巧功能强大的ASP.NET...

    JAVA上百实例源码以及开源项目

     Java非对称加密源程序代码实例,本例中使用RSA加密技术,定义加密算法可用 DES,DESede,Blowfish等。  设定字符串为“张三,你好,我是李四”  产生张三的密钥对(keyPairZhang)  张三生成公钥(publicKeyZhang...

    《程序天下:JavaScript实例自学手册》光盘源码

    11.18 树型目录菜单 第12章 窗口特效与弹出式警告 12.1 无关闭按钮的窗口 12.2 鼠标控制窗口开关 12.3 使窗口只第一次访问时弹出 12.4 禁止弹出警告框 12.5 关闭窗口不提示的方法 12.6 关闭窗口时的提示 12.7 定时弹...

Global site tag (gtag.js) - Google Analytics