我有以下代码
<a4j:status id="commonstatus" onstart="#{rich:component('loading')}.show();" onstop="#{rich:component('loading')}.hide();" />
<rich:dataTable id="dTable" reRender="ds">
<rich:column id="name" filterMethod="#{myBean.filterName}">
...
<h:inputText> <a4j:support event="onkeyup" reRender="dTable, ds" ignoreDupResponses="true" requestDelay="700" oncomplete="setCaretToEnd(event);" /> </h:inputText>
...
<rich:datascroller id="ds" reRender="dTable">
...
<a4j:support event="onchange" reRender="dtable, ds" status="commonstatus" />
...
</rich:dataTable>
<rich:modalPanel id="loading" moveable="false" autosized="true">
<h:panelGrid columns="2">
<h:graphicImage value="images/progress.gif"/>
<h:outputText value="Loading..."/>
</h:panelGrid>
</rich:modalPanel>
问题:即使我未在status="commonstatus"
中指定<h:inputText>
,我仍然会获得onkeyup事件的加载图片。
我在这里缺少什么?
任何帮助都会很棒。
答案 0 :(得分:1)
默认情况下,<a4j:status>
适用于触发ajax请求的页面中的所有组件。但是,您可以使用tag component documentation中所述的for
属性限制将捕获的组件:
for:指示其状态的AjaxContainer组件的ID(以javax.faces.UIComopnent.findComponent()调用的格式)。
答案 1 :(得分:0)
您可以h:inputText
a4j:region
或
将status
的{{1}}属性设置为不存在的状态ID(例如a4j:support
)
答案 2 :(得分:0)
可能有点弃用,但如果有人仍然使用Richfaces 3.3可能会有用...我在公共facelet模板中定义了2个状态组件。一个是当ajax事件触发并且它适用于整个页面时跨应用程序使用的主要状态,一个是“无”状态,什么都不做(并且它必须包装在区域中):
<a4j:status id="main" onstart="(something)" onstop="(something else)" />
<a4j:region>
<a4j:status id="none" onstart="" onstop="" />
</a4j:region>
每当我不希望出现主要状态时,我指定Andrey建议的“无”状态,但状态组件实际存在,因此避免了有关不存在组件的警告。
不要忘记将它包装在a4j:区域中,否则它将无法正常工作 - 如果在同一区域中有2个状态组件,我认为无论你放什么,我都会使用第二个状态组件在组件的状态标记中触发请求...