Это правильный способ интеграции bean-компонентов ViewScoped и RequestScoped? - PullRequest
6 голосов
/ 22 марта 2012

У меня есть страница, поддерживаемая управляемым компонентом 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);
    }
}

1 Ответ

2 голосов
/ 22 марта 2012

Сотрудничество имеет смысл.Только свойство DialogValue и метод handleDialogSave() излишни в PageBackingBean и могут ввести в заблуждение будущего сопровождающего.Вместо этого вы также можете просто сделать это в DialogValue бэк-бине.

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

И, возможно, переименовать DialogValue в DialogBacking или что-то подобное, по крайней мере, его имя не должно указывать на то, чтобы быть просто моделью.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...