AJAX延迟了richfaces树的选择

时间:2011-02-21 17:53:53

标签: java ajax jsf richfaces

我有一个使用Richfaces 4树控件的JSF 2应用程序。树设置为使用“AJAX”开关类型。在每个选择上,对服务器进行AJAX调用以更新树的辅助bean的选择值。

单击某个节点时,点击与显示为选中的节点之间存在延迟。文档确实说明使用这种方法可能会引起轻微延迟,但我想知道为什么它不只是在发出AJAX请求之前更新节点的样式,这样就不会留下用户想知道点击是否已经注册。

我一直在试图找出一种在javascript onclick事件上更新节点的方法,但是我没有看到我必须更改的跨度上的id。有没有其他人尝试类似的东西?我是否必须找到父div并继续工作到第二个跨度?当然有更好的方法吗?

请注意,使用“client”开关类型不是一个选项,因为我们需要能够动态查询子节点。在这种情况下,一次构建整个树是不实际的,因此它必须是“服务器”或“Ajax”。

1 个答案:

答案 0 :(得分:0)

回答我自己的问题 - 并且与我的“无客户转换”规定相矛盾。

由于我们正在使用RichFaces 4,我可以指定树节点扩展应该使用ajax(允许树“懒洋洋地”填充),并且选择应该只是客户端。但是,我们仍然需要将当前选择状态存储在树的辅助bean中。为此,我在页面中添加了一个a4j:jsfunction ...

<a4j:jsFunction name="onSelection">
    <a4j:param name="param1" assignTo="#{treeBean.selectedNodeID}"  />    
</a4j:jsFunction>

...并从每个树节点上的“onmousedown”事件中调用它......

onmousedown="onSelection('#{node.id}')"

这样,树可以直观地更新,而无需等待ajax请求完成,并且让用户感觉更加快捷。

唯一的问题似乎是onmousedown事件在点击切换时也被触发,因此扩展节点会使其“选中”而不更新其样式。不幸的是,“onselected”似乎没有在当前的里程碑版本中实现。