2013-03-04 5 views
1

나는 다음과 같은 코드를 가지고안 A4J : 만 시간 동안 상태 : InputText]를 구성 요소가 아니라 다른 구성 요소

<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에 대한 로딩 이미지를 얻을 행사. 여기에 무엇이 누락 되었습니까?

도움이 될 것입니다.

답변

1

기본적으로 <a4j:status>은 페이지에서 아약스 요청을 발생시키는 모든 구성 요소에 적용됩니다. 그러나 tag component documentation에 명시된대로 for 속성을 사용하여 적발 될 구성 요소를 제한 할 수 있습니다

을 위해 : 상태 표시 (A javax.faces.UIComopnent의 형식으로 AjaxContainer 구성 요소의 ID. findComponent() 호출). 당신은 존재하지 않는 상태 ID로 a4j:supporta4j:region

또는

설정 status 속성으로 h:inputText을 래핑 할 수

+0

감사합니다 :) 매력처럼 작동합니다. – akshob

+0

환영합니다. :) –

0

(예 status="none")

+0

이것은 솔루션이 아니라 해킹입니다. –

0

그것은 아마되지 조금이지만 수도 누군가 Richfaces 3.3에서 여전히 작동하는 경우 유용합니다 ... 공통 facelet 템플릿에서 2 개의 상태 구성 요소를 정의했습니다. 하나는 응용 프로그램에 걸쳐 사용되는 주요 상태 때마다 아약스 이벤트가 발생하며 전체 페이지에 적용, 하나는 아무것도하지 않습니다 "없음"상태 (그리고이 지역에 싸여해야 함) :

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

기본 상태를 표시하지 않으려 고 할 때마다 Andrey가 제안한대로 "없음"상태를 지정하지만 상태 구성 요소가 실제로 존재하므로 존재하지 않는 구성 요소에 대한 경고가 표시되지 않습니다.

a4j : region으로 감싸는 것을 잊지 마십시오. 그렇지 않으면 올바르게 작동하지 않습니다. 동일한 지역에 2 개의 상태 구성 요소가있는 경우, 두 번째 상태 구성 요소가 사용되는 경우 항상 두 번째 구성 요소가 사용됩니다. 요청을 발생시키는 구성 요소의 상태 태그를 넣으십시오.