1

我有以下代码

<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 事件的加载图像。我在这里想念什么?

任何帮助都会很棒。

4

3 回答 3

1

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

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

于 2013-03-04T14:47:20.490 回答
0

你可以h:inputText用一个包裹a4j:region

或者

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

于 2013-03-05T02:48:54.550 回答
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:region 中,否则它将无法正常工作 - 如果您在同一区域中有 2 个状态组件,我认为无论您在状态标签中放入什么,都会使用第二个触发请求的组件的...

于 2015-06-19T10:47:36.077 回答