加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ajax树及注意点

发布时间:2020-12-15 21:04:30 所属栏目:百科 来源:网络整理
导读:Ajax树的示例, 如下所示: s:url var="nodesUrl" namespace="/tree"action="ajaxQueryNodes.action" / sx:tree id="testTree" href="%{#nodesUrl}"/ 在Ajax树中,JSP页上的设置没什么可讨论的,重点在配置的Action上,该Action的返回值是“freemarker”类型

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树(带数据库连接)实例

点击打开链接

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读