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