我正在研究一个使用rich:tree元素的项目,当展开时,应该使用a4j:status在附近显示处理动画。我遇到的问题是,树是由多个其他元素重新渲染的。我认为造成最大麻烦的是a4j:push元素,它每秒渲染树。这个重渲染导致status元素在不应该改变状态的时候改变状态,导致屏幕上闪烁。
我的状态元素:
<a:outputPanel id="working_animation" style="display: block; height: 1px">
<!-- Working animation -->
<a:status stopText=" " id="header_progress">
<a:facet name="start">
<a:outputPanel id="header_working" rendered="#{rich:element('tree_state.value').value}" style="padding-left: 16.5em;">
<span id="l-1"></span>
<span id="l-2"></span>
<span id="l-3"></span>
<span id="l-4"></span>
<span id="l-5"></span>
<span id="l-6"></span>
</a:outputPanel>
</a:facet>
</a:status>
</a:outputPanel>
tree元素的一部分:
<rich:tree
id="sectionTree"
switchType="ajax"
value="#{sectionAction.sectionNodes}"
var="node"
nodeFace="#{node.nodeType}"
rightClickSelection="true"
ajaxSubmitSelection="true"
iconCollapsed="/img/treenode/collapsed.png"
iconExpanded="/img/treenode/expanded.png"
componentState="#{sectionAction.treeState}">
<rich:changeExpandListener binding="#{sectionAction}" />
<rich:nodeSelectListener binding="#{sectionAction}" />
之后是节点定义
push元素:
<h:form>
<a:push
eventProducer="#{loggedUser.registerLoginListener}"
interval="1000"
reRender="sectionTree">
</a:push>
<a:push
eventProducer="#{loggedUser.registerStudentListener}"
interval="2000"
reRender="sectionTree">
</a:push>
</h:form>
有两种方法可以禁用状态:
- 用
a:region
包裹a:push
标签。 - 为
a:push
指定status="none"
属性
详细信息请参考现场演示:http://livedemo.exadel.com/richfaces-demo/richfaces/status.jsf?c=status&tab=usage