У меня есть страница, поддерживаемая управляемым компонентом ViewScoped.На странице есть диалоговое окно (я использую простые символы), которое поддерживается RequestScoped ManagedBean.Я решил сделать так, чтобы управляемый запрос bean-объекта диалогового окна был ограничен таким образом, чтобы он очищался при каждом запуске диалогового окна (в основном случай использования заключается в том, что пользователь открывает диалоговое окно, заполняет некоторые данные, а затем данные добавляются на страницуподдерживается управляемым компонентом ViewScoped).
Способ, которым я интегрирую два bean-компонента, - через ManagedProperty в bean-компоненте RequestScoped диалогового окна.т. е. компонент ViewScoped внедряется в компонент RequestScoped.При сохранении диалога метод actionListener в компоненте RequestScoepd диалогового окна обновляет свойство в компоненте ViewScoped, которое содержит ссылку на RequestScoped ManagedBean, с текущим экземпляром компонента.Затем actionListener на управляемом bean-объекте ViewScoped вызывается bean-объектом области действия запроса.Следовательно, actionListneer в управляемом компоненте ViewScoped может работать с недавно внедренным RequestScoped ManagedBean.
Это хороший способ сделать то, что я пытаюсь сделать, или есть лучший способ?
Пример кода:
@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);
}
}