【问题标题】:Is this the correct way to integrate a ViewScoped and RequestScoped bean?这是集成 ViewScoped 和 RequestScoped bean 的正确方法吗?
【发布时间】:2012-04-07 03:26:04
【问题描述】:

我有一个由 ViewScoped 托管 Bean 支持的页面。该页面上有一个由 RequestScoped ManagedBean 支持的对话框(我使用的是 primefaces)。我选择将对话框的托管 bean 请求限定为范围,以便在启动对话框时将其清除(基本上用例是用户打开对话框,填写一些数据,然后将数据添加到页面由 ViewScoped 托管 Bean 支持)。

我集成这两个 bean 的方式是通过对话框的 RequestScoped bean 上的 ManagedProperty。即 ViewScoped bean 被注入 RequestScoped bean。保存对话框时,对话框的 RequestScoepd Bean 上的 actionListener 方法会更新 ViewScoped bean 上的属性,该 bean 使用 bean 的当前实例保存对 RequestScoped ManagedBean 的引用。然后 ViewScoped 托管 bean 上的 actionListener 由请求范围 bean 调用。 ViewScoped managed bean 中的 actionListneer 因此能够与新注入的 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);
    }
}

【问题讨论】:

    标签: jsf-2


    【解决方案1】:

    合作非常有意义。只有DialogValue 属性和handleDialogSave() 方法在PageBackingBean 中是多余的,可能会让未来的维护者感到困惑。您也可以在 DialogValue 支持 bean 中执行此操作。

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

    也许将DialogValue 重命名为DialogBacking 之类的,至少它的名字不应该暗示它只是一个模型。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-14
      • 2015-04-13
      • 2011-02-17
      • 2013-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多