仅对h:inputText组件禁用a4j:status,但不禁用其他组件

时间:2013-03-04 10:42:39

标签: jsf richfaces richdatatable

我有以下代码

<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事件的加载图片。 我在这里缺少什么?

任何帮助都会很棒。

3 个答案:

答案 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个状态组件,我认为无论你放什么,我都会使用第二个状态组件在组件的状态标记中触发请求...