2012-04-25 3 views
0
나는 팝업 HTML 페이지를 시작 PrimeFaces에게 <p:dialog>를 사용하고

<p:commandButton> 그것을 닫습니다 :actionListener가 호출되기 전에 Ajax 구성 요소가 업데이트됩니까?

<p:commandButton id="submitButton" 
    value="OK" 
    actionListener="#{MultiFileSelectMgmtBean.actionOk}" 
    update=":formID:fileTreeID" 
    oncomplete="dlg1.hide();"/> 

문제가 fileTreeID 전에 업데이트 될 것입니다 :

이 확인 버튼을 누를 때 할 것입니다 액션 리스너가 완료되었습니다. actionOk()을 먼저 호출 한 다음 fileTreeID을 업데이트하려면 어떻게해야합니까?

편집 :

문제가 팝업 페이지 B (BackingBeanB)는 그 상위 페이지 A가 부하를 계산하고 몇 가지 값을 저장해야하고 BackingBeanA::BackingBeanA 생성자에서 사용합니다. 부모 페이지 A가 으로 구성되고 자식 페이지 B가 BackingBeanB::actionOk()이 호출되기 전에 발생합니다. fileTreeID 업데이트해야하는 구성 요소는 페이지 A에 있으며 페이지 A 생성자에서 계산 된 값에 따라 달라 지므로 이전 값으로 업데이트되고 BackingBeanB::actionOk()에서 계산되는 새 값으로 업데이트되지 않습니다.

+2

사실이 아닙니다. 문제를 잘못 해석하거나 원인이 다른 곳에서 발생했습니다. – BalusC

+0

@BalusC : 질문을 수정했습니다. 더 명확 해 졌는지 확인해주세요. – Danijel

답변

1

콩이 요청 범위에있는 것 같습니다. 뷰 범위에 빈을 대신 넣으십시오.

@ManagedBean 
@ViewScoped 
public class BeanA {} 
@ManagedBean 
@ViewScoped 
public class BeanB {} 

콩은 같은보기와 상호 작용하는만큼 살고되지 않습니다이 방법

은 모든 단일 HTTP 요청에 재구성 될 수있다.

update은 수행되지 않습니다. 전에 조치가 호출되었습니다. 백킹 빈의 가능한 구성은 렌더링 응답 동안에 만 반드시 수행되는 것은 아닙니다. 뷰 복원 단계 중에 이미 발생할 수 있습니다.

+0

어떻게 하위 페이지 B에서 부모 A로 값을 전달할 것을 권장합니까? 지금까지 내가했던 것은'Map sessionVars = FacesContext.getExternalContext(). getSessionMap(); 그리고 B 페이지의'sessionVars.put'과 A 페이지의'sessionVars.get'에 저장하는 것이었다. – Danijel

+0

관리 빈 속성으로 일반적인 방법으로 바인드하면됩니다. – BalusC

관련 문제