2012-03-22 9 views
6

Tengo una página respaldada por ViewScoped Managed Bean. La página tiene un cuadro de diálogo (estoy usando Primefaces) respaldado por RequestScoped ManagedBean. Elegí que la solicitud de beans administrados del diálogo tuviera un alcance para que se borrara cada vez que se lanzara el diálogo (básicamente, el caso de uso es que el usuario abre el diálogo, rellena algunos datos y luego los datos se agregan a la página que está respaldado por ViewScoped Managed Bean).¿Es esta la forma correcta de integrar un bean ViewScoped y RequestScoped?

La forma en que estoy integrando los dos beans es a través de ManagedProperty en el bean RequestScoped del diálogo. es decir, el bean ViewScoped se inyecta en el bean RequestScoped. Al guardar el diálogo, un método actionListener en el diálogo RequestScoepd Bean actualiza la propiedad en el bean ViewScoped que contiene una referencia a RequestScoped ManagedBean con la instancia actual del bean. A continuación, el bean con ámbito de solicitud invoca el actionListener en el bean gestionado ViewScoped. El actionListneer en el bean gestionado ViewScoped puede por lo tanto trabajar con RequestScoped ManagedBean recién inyectado.

¿Es esta una buena manera de hacer lo que estoy tratando de hacer o hay una manera mejor?

Código de ejemplo:

@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); 
    } 
} 

Respuesta

2

La cooperación hace perfectamente sentido. Solo la propiedad DialogValue y el método handleDialogSave() son superfluos en PageBackingBean y pueden ser confusos para el futuro mantenedor. También podría simplemente hacer esto en DialogValue bean de respaldo.

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

Y tal vez cambie el nombre del DialogValue-DialogBacking o algo así, por lo menos su nombre debería aconsejan no sólo un modelo.

Cuestiones relacionadas