2009-11-30 4 views
2

요청 범위에 정의 된 세션 범위와 컨트롤러 빈에 정의 된 양식 bean이 있습니다. JSF를 사용하여 세션 범위가 지정된 빈을 요청 범위의 빈에 주입합니다.JSF 관리 Bean 라이프 사이클을 이해하는 데 도움이됩니다.

<managed-bean> 
<managed-bean-name>Controller</managed-bean-name> 
<managed-bean-class> 
    com.mycomp.Controller 
</managed-bean-class> 
<managed-bean-scope>request</managed-bean-scope> 
<managed-property> 
<property-name>form</property-name> 
<value>#{Form}</value> 
</managed-property> 
</managed-bean> 

<managed-bean> 
    <managed-bean-name>Form</managed-bean-name> 
    <managed-bean-class>com.mycomp.form</managed-bean-class> 
    <managed-bean-scope>session</managed-bean-scope> 
</managed-bean> 

문제는 내가 양식을 저장할 때 내 영속 계층이 생성 날짜, ID와 새로운 빈을 반환하고 다른 속성을 설정한다는 것입니다. 그런 다음 반환 된 빈을 사용하여 로컬 빈을 설정합니다. 이 시점에서 세션 범위 Bean을 설정해야합니까?

class Controller { 

    private Form form; 
    // getters and setters here 
    ... 

    public void save() { 
    Form f = dataservice.save(form); 
    this.form = f; 

    // This 
    //FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("Form", form); 

    // or this? 
    //FacesContext.getCurrentInstance().getApplication().createValueBinding(
    //   "#{Form}").setValue(
    //   FacesContext.getCurrentInstance(), form; 
    }  
    } 
+0

저장을 클릭 한 후 사용자가 동일한 페이지에 머물러 있고 데이터 서비스에서 반환하는 값을보고 싶습니다. 양식의 "날짜 작성"및 "마지막 수정 날짜"필드는 Controller.form.createDate 등에 바인드됩니다. – Future429

답변

2

아무 것도 할 필요가 없습니다. 변경 사항은 이미 'form'bean에 반영되어 있습니다. 그래서 당신은 기본적으로 그냥

public void save() { 
    dataservice.save(form); 
} 

dataservice이 작업을 충분히하고있는 가정으로 앞서 갈 수 있습니다.

관련 문제