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



我有以下代码

<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>

问题:即使我没有在<h:inputText>中指定status="commonstatus",我仍然可以获得onkeyup事件的加载图像。我遗漏了什么?

默认情况下,<a4j:status>适用于页面中触发ajax请求的所有组件。但是,您可以使用标记组件文档中所述的for属性来限制将被捕获的组件:

for:指定状态的AjaxContainer组件的ID(以javax.faces.UIComopnent.findComponent()调用的格式)。

可以用a4j:region来包装h:inputText

设置a4j:supportstatus属性为不存在的状态id(例如status="none")

这可能有点过时了,但如果有人仍然使用Richfaces 3.3,可能会很有用…我在公共facet模板中定义了2个状态组件。一种是主状态,它在ajax事件触发时跨应用程序使用,并应用于整个页面;另一种是"none"状态,它什么都不做(必须用区域包装):

<a4j:status id="main" onstart="(something)" onstop="(something else)" />
<a4j:region>
   <a4j:status id="none" onstart="" onstop="" />
</a4j:region>

每当我不希望主状态出现时,我就像Andrey建议的那样指定"none"状态,但是状态组件实际上存在,因此避免了关于不存在组件的警告。

不要忘记将它包装在a4j:region中,否则它将无法正常工作-如果您在同一区域有2个状态组件,我认为总是第二个将被使用,无论您在触发请求的组件的状态标签中放入什么…

相关内容

  • 没有找到相关文章

最新更新