2010-11-27 3 views
2

제목에 의해 질문이 명확하다고 생각합니다. 이것은 나의 실제 콩입니다 :JSF - @PostAjax 호출을 사용하여 블록 설정 메소드를 생성 할 수 있습니까?

@ManagedBean(name="selector") 
@RequestScoped 
public class Selector { 
    private String profilePage; 

    @PostConstruct 
    public void init() { 
     System.out.println("I'm PostConstruct"); 
     if(profilePage==null || profilePage.trim().isEmpty()) { 
      this.profilePage="main"; 
     } 
    } 

    public String getProfilePage() { 
     return profilePage; 
    } 

    public void setProfilePage(String profilePage) { 
     this.profilePage=profilePage; 
     System.out.println("I'm setProfilePage"); 
    } 
} 

그리고 난 아약스 호출을 사용하여 자신의 값 (profilePage)를 변경 :

<h:commandButton value="Some Action"> 
    <f:setPropertyActionListener target="#{selector.profilePage}" value="some" /> 
    <f:ajax event="action" render=":profileContent"/> 
</h:commandButton> 

내가 서버 내 출력 I'm setProfilePage 다음 I'm PostConstruct의 시퀀스 적없는 것을 알 수 . 때로는 I'm setProfilePage가 전혀 없습니다.

내가 방법은 콩을 만든 후 호출됩니다 @PostConstruct 주석으로 표시 읽었, 모든 자원이 주입되고, 어떤 관리 속성이 설정되어 있지만 전에 빈은 실제로 범위에 푸시됩니다.

@PostConstruct이 설정 메소드와 충돌 할 수 있는지 알고 싶습니다.

건배

답변

1

때때로 I'm setProfilePage은 전혀 존재하지 않는다. UICommand 구성 요소 중 요청 값 단계 및/또는 업데이트 모델을 적용 컴포넌트 트리에서 렌더링되지 않을 때 발생할 수

위상 값. 나는. 그 또는 그 부모 중 하나의 rendered 속성은 그 시점에서 false을 평가했습니다.

@PostConstruct의 존재가 영향을 미치면 안됩니다.

1

BalusC가 나타내는 바와 같이, 렌더링 된 속성을 포스트 백에서 false로 설정하면 액션 메소드가 실행되지 않는 원인이 될 수 있습니다. 이는 일반적으로 이러한 속성의 기본값이 false이고 나중에 JSF 라이프 사이클 (즉, 요청 값 적용 후)이 true로 설정된 경우에만 발생합니다.

가능한 경우 true로 설정하거나 뷰 범위 또는 Tomahawk saveState 태그를 사용하여이 특성 값을 기억하면이 문제를 해결할 수 있습니다.

또한 PostConstruct 옆에서 AJAX도이 문제와 관련이 없어야 함을 말씀드립니다.

+0

실제로 렌더링 된 속성을 false로 설정하지 않았습니다. 내 문제의 예를 여기에서 볼 수 있습니다. http://stackoverflow.com/questions/4292330/jsf-ajax-call-what-is-it-wrong-on-this-code – markzzz