2009-11-30 72 views
2

我有一个在会话范围中定义的表单bean和一个在请求范围中定义的控制器bean。我正在使用JSF将会话作用域bean注入到请求作用域bean中。帮我理解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设置本地bean。我是否也应该在此时设置会话作用域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 2009-11-30 19:18:12

回答

2

你不需要做任何事情。这些更改已经反映在“表单”bean中。所以,你基本上可以只用

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

假设dataservice正在做的工作不够好继续前进。