2012-03-22 2 views
6

ViewScoped Managed Bean이 지원하는 페이지가 있습니다. 이 페이지에는 RequestScoped ManagedBean이 지원하는 대화 상자가 있습니다 (저는 primefaces를 사용하고 있습니다). 대화 상자가 시작될 때마다 대화 상자의 관리 빈 요청이 범위를 지도록하여 대화 상자가 시작될 때마다 지워지도록 선택했습니다 (기본적으로 사용 사례는 대화 상자를 열고 일부 데이터를 채운 다음 데이터가 페이지에 추가됩니다. ViewScoped Managed Bean에 의해 뒷받침 됨).ViewScoped 및 RequestScoped 빈을 통합하는 올바른 방법입니까?

두 콩을 통합하는 방법은 대화 상자의 RequestScoped 빈에 ManagedProperty를 사용하는 것입니다. 즉, ViewScoped 빈이 RequestScoped 빈에 삽입된다. 대화 상자를 저장할 때 Dialog의 RequestScoepd Bean에있는 actionListener 메소드는 RequestScoped ManagedBean에 대한 참조를 보유하는 ViewScoped bean의 등록 정보를 bean의 현재 인스턴스로 갱신합니다. 그런 다음 ViewScoped 관리 Bean의 actionListener가 요청 범위 Bean에 의해 호출됩니다. 따라서 ViewScoped 관리 빈의 actionListneer는 새로 삽입 된 RequestScoped ManagedBean과 작업 할 수 있습니다.

내가하는 일을 수행하는 좋은 방법입니까 아니면 더 좋은 방법입니까?

샘플 코드 :

@ManagedBean 
@ViewScoped 
public class PageBackingBean 
{ 
    List<DialogValue> dialogValues; 

    DialogValue dialogValue; 

    public void setDialogValue(DialogValue dialogValue) 
    { 
     this.dialogValue = dialogValue); 
    } 

    public DialogValue getDialogValue() { return dialogValue; } 

    public void handleDialogSave(ActionEvent event) 
    { 
     dialogValues.add(getDialogValue()); 
    } 
} 

@ManagedBean 
@RequestScoped 
public class DialogValue 
{ 
    @ManagedProperty(#{pageBackingBean}) 
    PageBackingBean pageBackingBean; 

    String val1; 
    String val2; 

    // getters/setters ommitted for brevity... 

    public void dialogSave(ActionEvent event) 
    { 
     pageBackingBean.setDialogValue(this); 
     pageBackingBean.handleDialogSave(event); 
    } 
} 

답변

2

협력 완벽 의미가 있습니다. DialogValue 속성과 handleDialogSave() 메서드 만이 PageBackingBean에 불필요하며 이후 관리자에게 혼동을 줄 수 있습니다. 대신에 DialogValue backing bean에서도이 작업을 수행 할 수 있습니다.

public void dialogSave(ActionEvent event) 
{ 
    pageBackingBean.getDialogValues().add(dialogValue); 
} 

그리고 어쩌면이 DialogValue DialogBacking 또는 무언가에, 적어도 그 이름이 단지 모델 인 제안 안 바꿉니다.

관련 문제