Является ли это правильным способом интеграции bean-компонентов ViewScoped и RequestScoped?

У меня есть страница, поддерживаемая управляемым компонентом 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);
    }
}
6
задан BestPractices 22 March 2012 в 14:38
поделиться