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