2017-03-28 24 views
0

동적 패널 (다양한 항목이있는 패널)을 만들고 나서 뷰 페이지의 패널 구성 요소에 바인드하려면 패널 객체가있는 관리 빈의 범위는 @ViewScoped입니다. ajax이보기 페이지에서이 패널을 렌더링하면 관리 빈을 다시 빌드한다는 것을 알았습니다. 그 이유는 무엇입니까? ,보기 범위가 지정된 관리 Bean에서 개체와 구성 요소를 바인딩하는 방법은 무엇입니까?

<h:form> 
    <ace:panel binding="#{myBean.myPanel}"></ace:panel> 
    <ace:pushButton actionListener="#{myBean.something}"> 
     <ace:ajax render="@form" /> 
    </ace:pushButton> 
</h:form> 

내가 버튼을 누를 때마다에서의 관리 빈 생성자가 호출 :이 관리 빈입니다

:

package test; 

import org.icefaces.ace.component.panel.Panel; 

@ManagedBean(name = "myBean") 
@ViewScoped 

public class myBean { 

    private Panel myPanel; 

    // Constructor 
    public myBean() { 
     myPanel = drawPanel(); // this function initiate and add items to the panel 
    } 

    // Setters and Getters Methods 
} 

이보기 페이지는 여기 내 코드입니다 왜 그런 일이 일어 났습니까? 또한 패널 구성 요소에서 바인딩 특성을 제거하거나 관리되는 빈 세션 또는 응용 프로그램 범위의 범위를 만들면 생성자가 호출되지 않습니다.

참고 : icefaces 3 및 jsf 2.0을 사용하고 있습니다.

이 상황에 대한 해결책이 있습니까? ICEFaces 문서로

답변

0

는 말한다 :

푸시 버튼 완전한 형태의 입력하거나 자체를 할 수있는 구성 요소입니다. 일반 jsf 명령 버튼과 동일한 기능을하지만 추가 속성을 추가 할 필요가 없습니다.

푸시 버튼은 탐색 버튼이므로 탐색을 수행합니다. action 속성을 사용하지 않으면 기본값을 적용합니다. 나는 그것이 무엇인지 (나는 단지 빈 문자열이라고 생각한다) 찾을 수 없다.

UICommands의 작용 결과에 따라 JSF 탐색 규칙 :

  • null 또는 무효가 : 현재보기를 다시로드

  • 빈 문자열가 :합니다 (만약 현재보기를 재현 보기를 재현,보기 범위 콩도 동일합니까)

  • 비어 있지 않은 strin g : 탐색 처리기에서 결정한 다음보기입니다.

    <ace:pushButton action="#{myBean.nextPage}" actionListener="#{myBean.something}"> 
    

    을 그리고 링크 된 핸들러 메소드에서 다시 null 값을 전달합니다 : 이유는 action 속성의 빈 문자열 기본 결과 인 경우

, 다음면에서 사용

public class MyBean // You use myBean here in your question improperly 
{ 
    public String nexPage() 
    { return null; } 
}