2009-11-30 7 views
2

J'ai un bean formulaire défini dans la portée de la session et un bean contrôleur défini dans la portée de la demande. J'utilise JSF pour injecter le bean scoped de session dans le bean scope scoped.Aidez-moi à comprendre le cycle de vie du bean géré par JSF

<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> 

Le problème est que lorsque j'enregistre la forme ma couche de persistance retourne un nouveau bean avec ID, la date de création, et d'autres attributs définis. J'ai ensuite défini le bean local en utilisant le bean retourné. Dois-je également définir le bean tronqué de session en ce moment?

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

Je dois préciser que l'utilisateur reste sur la même page après avoir cliqué sur Enregistrer et que je souhaite voir les valeurs renvoyées par le service de données. Les champs "date de création" et "dernière date de modification" du formulaire sont liés à Controller.form.createDate, etc. – Future429

Répondre

2

Vous n'avez rien à faire. Les modifications sont déjà reflétées dans le bean 'form'. Donc, fondamentalement, vous pouvez aller de l'avant avec juste

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

en supposant que le dataservice fait son travail assez bien.

Questions connexes