前端之家收集整理的这篇文章主要介绍了
ajax树及注意点,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
Ajax树的示例,如下所示:
<s:url var="nodesUrl" namespace="/tree"action="ajaxQueryNodes.action" />
<sx:tree id="testTree" href="%{#nodesUrl}"/>
在Ajax树中,JSP页上的设置没什么可讨论的,重点在配置的Action上,该Action的返回值是“freemarker”类型,指向一个ftl文件,具体配置如下所示:
<action name="ajaxQueryNodes"class="com.idmaker.node.TreeAction" method="AjaxQueryNodes">
<resulttype="freemarker">/jsp/tree/ajaxDynamicTree.ftl</result>
</action>
这个action并不需要执行体,所以上面的method="AjaxQueryNodes"并没有意义,可有可无,返回到需要的result上就行了。示例中ftl文件内容如下:
[
<#list ajaxTreeWrapper.children asnode>
{
label:'${node.name}',
id:'${node.id}',
hasChildren:${(node.children.size() > 0)?string}
},
</#list>
]
这一部分的映射关系需要留意了:“ajaxTreeWrapper.children”中的“ajaxTreeWrapper”是由action返回的,所以上面的action虽然不需要执行体,但必须有一个相应的getAjaxTreeWrapper()方法,返回一个对象。由“ajaxTreeWrapper.children”中的“.childre”可知,返回的对象又必须有getChildren()方法,需要返回一个List,List元素都是getAjaxTreeWrapper()方法返回对象同类的。再由label和id(同静态树相应的参数)的定义可知,getChildren()方法返回对象必须有getName()和getId()方法,用于添充结点的label和id的值。
此外,需要注意以下几点:
1.由于使用node.children.size()验证结点是否有子结点,所以getChildren()不能返回null,如果没有子结点,也只能返回空的list,如returnnewArrayList();
2.根结点是在action的getAjaxTreeWrapper()方法中指定的,但是页面上直接从它的子结点开始展示。所以如果与动态树对比,当两棵树都指定同一个数据源、指定同一个根结点,则Ajax树会从动态树的第二层开始展示。为了与动态树展示一样的结果,需要在数据源中虚拟一个根结点的根结点,让Ajax树的根指向新的虚拟根结点。
3.由于Ajax树的定义只指定了一个action,并通过该action来取得它的子结点,所以getAjaxTreeWrapper()方法的返回值需要与结点的id关联,即点击不同结点时,由action将点击的结点的id带给getAjaxTreeWrapper()方法,通过这个参数返回不同的结点,再由ftlr指定的关系,取得它们的子结点。
4.上面提到的getChildren()方法,都是指取一个结点的子结点,而不包括其子结点的子结点。子结点存放的数据结构就不在这里讨论了,只要能按节点取出其子结点就可以了。
ajax树(无数据库连接)实例
ajax树(带数据库连接)实例
点击打开链接
原文链接:https://www.f2er.com/ajax/166819.html