<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    love fish大鵬一曰同風(fēng)起,扶搖直上九萬(wàn)里

    常用鏈接

    統(tǒng)計(jì)

    積分與排名

    friends

    link

    最新評(píng)論

    運(yùn)用ajax技術(shù)的樹型菜單(轉(zhuǎn))

    ?

    ?? 樹型菜單可以說(shuō)是項(xiàng)目中應(yīng)用最為廣泛的運(yùn)用。以前無(wú)論使用微軟控件的樹型,還是比較優(yōu)秀的阿賴樹型,都是將數(shù)據(jù)全部讀出,然后再分級(jí)顯示。這樣如果數(shù)據(jù)量大,那么第一次顯示將需要客戶等待很長(zhǎng)一段時(shí)間,降低了客戶的體驗(yàn)度。如今使用ajax,事情變得簡(jiǎn)單了。

    ?? 此運(yùn)用參考了《征服web2.0開發(fā)技術(shù)詳解》的例子。

    ???我使用的平臺(tái)是struts+spring+hibernate,但與ajax打交道的也就是struts。我無(wú)法將整個(gè)代碼貼出來(lái),因此把重要的前臺(tái)ajax代碼貼出來(lái),至于后臺(tái)的代碼就看你自己所使用的技術(shù)了。

    1、jsp頁(yè)面

    <% @?page?language = " java " ?contentType = " text/html;?charset=GB2312 " ? import = " java.util.*,com.wehave.oa.cecontract.model.TbJyhtflb " %>
    < html >
    < head >
    < title > Insert?title?here </ title >
    < link?rel = " stylesheet " ?href? = ? " ../css/tree.css " >
    < script?type = " text/javascript " ?src = " ../js/tree_ajax.js " ></ script >
    < script?type = " text/javascript " ?src = " ../js/tree_htfl.js " ></ script >
    < script?languge = " javascript " >
    ????function?ShowDetail(ID,NAME,FLAG)
    {
    ????????window.parent.right.location?
    = " getContract.go?method=doGetContract&folderID= " ? + ID? + ? " &&folderName= " + NAME + " &&flag= " + FLAG;
    ????}

    </ script >
    </ head >
    < body?bgcolor = " #F6F9FF " >
    < tbody >
    < table?cellpadding = " 0 " ?cellspacing = " 0 " ?width = " 300 " ? >
    ?
    < div?id = " load " ?style = " display:none " > ? < img?src = " ../images/tree_loading.gif " > Loading?data.. </ div >
    < ul? class = " tree " >
    <% ??List?treeList? = ?(List)request.getAttribute( " treefolder " );
    ????Iterator?it
    = treeList.iterator();
    ????
    while (it.hasNext()) {
    ????????out.println(it.next().toString());
    ????}

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

    2、js代碼
    function?showHide(?id?)
    {
    ??var?el
    =?document.getElementById(?id?);
    ??var?bExpand?
    =?true;
    ??var?images?
    =?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";
    ??}

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


    function?getSubTree(?id?,submitURL)
    {
    ??var?submitURL
    =submitURL
    ??postXmlHttp(?submitURL,?
    'parseSubTree("'+id+'")'?,'load("'+id+'")');
    }

    function?parseSubTree(id)
    {
    ??var?el
    =?document.getElementById(?id?);
    ??var?ulElmt
    =?document.createElement("UL");
    ??ulElmt.innerHTML
    =_xmlHttpRequestObj.responseText;
    ??el.appendChild(ulElmt);
    ??var?images?
    =?el.getElementsByTagName("IMG");
    ??images[
    0].setAttribute("src",?"../images/tree_minus.gif");
    ??images[
    0].setAttribute("onclick",?new?Function("showHide('"+id+"')"));
    ??var?aTag?
    =?el.getElementsByTagName("A");
    ??aTag[
    0].setAttribute("onclick",?new?Function("showHide('"+id+"')"));
    ??var?loadDiv
    =?document.getElementById(?"load"?);
    ??loadDiv.style.display
    ="none";
    }


    function?load(id)
    {
    ?var?loadDiv
    =?document.getElementById(?"load"?);
    ?loadDiv.style.display
    ="block";
    }


    var?_postXmlHttpProcessPostChangeCallBack;
    var?_xmlHttpRequestObj;
    var?_loadingFunction;

    function?postXmlHttp(?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){}
    ??}

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

    ??
    else?if(window.ActiveXObject)
    ??
    {
    ????_xmlHttpRequestObj
    =new?ActiveXObject("Microsoft.XMLHTTP");
    ????_xmlHttpRequestObj.open(
    'POST',submitUrl,true);
    ????_xmlHttpRequestObj.onreadystatechange
    =postXmlHttpProcessPostChange;
    ????_xmlHttpRequestObj.send();
    ??}

    }
    ;

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

    ??}

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

    }

    3、action代碼

    /**
    ?????*?展開第一層目錄
    ?????
    */

    ????
    public?ActionForward?doGetFolderList(
    ????????????ActionMapping?mapping,
    ????????????ActionForm?form,
    ????????????HttpServletRequest?req,
    ????????????HttpServletResponse?res)
    {
    ????????List?list?
    =?treeCatalogService.getChildren("0");
    ????????List?TreeFolder
    =new?ArrayList();
    ????????Iterator?it
    =list.iterator();
    ????????
    while(it.hasNext()){
    ????????????TbJyhtflb?htfl
    =(TbJyhtflb)it.next();
    ????????????String?s
    =treeCatalogService.renderTreeViewAjax(htfl);
    ????????????TreeFolder.add(s);
    ????????}

    ????????req.setAttribute(
    "treefolder",TreeFolder);
    ????????
    return?mapping.findForward("foldertree");
    ????}

    ????
    ????
    /**
    ?????*?展開下級(jí)目錄
    ?????
    */

    ????
    public?ActionForward?doGetSubFolderList(
    ????????????ActionMapping?mapping,
    ????????????ActionForm?form,
    ????????????HttpServletRequest?req,
    ????????????HttpServletResponse?res)
    {
    ????????String?parentID?
    =?req.getParameter("parentID");?//獲得id的值
    ????????if?(parentID!=null&&!parentID.equals("")){?//如果不為null和空
    ????????????res.setContentType("text/html;charset=GB2312");
    ????????????List?list?
    =?treeCatalogService.getChildren(parentID);
    ????????????Iterator?it
    =list.iterator();
    ????????????
    try?{
    ????????????????PrintWriter?out
    =?res.getWriter();
    ????????????????
    while(it.hasNext()){
    ????????????????????TbJyhtflb?htfl
    =(TbJyhtflb)it.next();
    ????????????????????out.println(treeCatalogService.renderTreeViewAjax(htfl));
    ????????????????}

    ????????????????out.close();
    ????????????}
    catch(Exception?e){
    ????????????????e.printStackTrace();
    ????????????}

    ????????}

    ????????
    return?null;
    ????}

    4、service層代碼
    /**
    ?????*?函數(shù)說(shuō)明:展開目錄
    ?????*?參數(shù)說(shuō)明:?目錄對(duì)象
    ?????*?返回值:展開目錄的HTML代碼
    ?????
    */

    ????
    public?String?renderTreeViewAjax(TbJyhtflb?htfl)?{
    ????????StringBuffer?content?
    =?new?StringBuffer();
    ????????String?ID
    =htfl.getTbJyhtflbZlId();
    ????????String?NAME
    =htfl.getTbJyhtflbMc();
    ????????String?FLAG
    =htfl.getTbJyhtflbLb();
    ????????content.append(
    "<li?id='"+ID+"'>");
    ????????
    if?(treeCatalogDAO.canExpand(ID))
    ????????????content.append(
    "<img?src=../images/tree_plus.gif?onClick=\"getSubTree('"+ID+"')\">");
    ????????
    else
    ????????????content.append(
    "<img?src=../images/tree_blank.gif>");
    ????????content.append(
    "<img?src=../images/tree_folder.gif><a?href=\"javascript:ShowDetail('"+ID+"','"+NAME+"','"+FLAG+"')\"");
    ????????
    if?(treeCatalogDAO.canExpand(ID)){
    ????????????String?submitURL
    ="getFolderList.go?method=doGetSubFolderList&parentID="+ID;
    ????????????content.append(
    "?onClick=\"getSubTree('"+ID+"',submitURL)\"");
    ????????}

    ????????content.append(
    ">"+NAME+"</a>");
    ????????
    ????????content.append(
    "</li>");
    ????????
    return?content.toString();
    ????}


    代碼基本就是這樣了,希望對(duì)大家有用。

    posted on 2006-07-24 15:24 liaojiyong 閱讀(571) 評(píng)論(0)  編輯  收藏 所屬分類: Ajax

    主站蜘蛛池模板: 3d成人免费动漫在线观看| 日韩精品无码区免费专区| 亚洲精品视频久久| 日韩人妻无码免费视频一区二区三区 | 99精品视频免费观看| 亚洲av午夜国产精品无码中文字| 亚洲成a人片在线观看久| 8x8×在线永久免费视频| jizz免费观看视频| 亚洲国产成人99精品激情在线| 亚洲第一成人影院| 亚洲国产精品一区二区九九 | 91精品国产免费久久国语麻豆| 十八禁无码免费网站| 搜日本一区二区三区免费高清视频| 亚洲福利视频网址| 国产精品亚洲午夜一区二区三区| 亚洲国产成人va在线观看网址| 亚洲一区无码中文字幕| 成人免费午夜视频| 巨波霸乳在线永久免费视频| 成年黄网站色大免费全看| a级片免费观看视频| 男男gay做爽爽免费视频| 亚洲国产成人久久77| 伊人久久五月丁香综合中文亚洲| 亚洲欧洲国产精品你懂的| 国产亚洲精品资在线| 波多野结衣视频在线免费观看| 中文字幕影片免费在线观看| 中文字幕亚洲免费无线观看日本 | 日韩毛片免费无码无毒视频观看| 尤物永久免费AV无码网站| 国产偷窥女洗浴在线观看亚洲| 亚洲国产精品一区二区成人片国内 | 免费国产午夜高清在线视频| 国产精品免费在线播放| 99re视频精品全部免费| 香蕉高清免费永久在线视频| 成在人线AV无码免费| 亚洲一区二区三区在线播放|