Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf 2 这是集成ViewScope和RequestScope bean的正确方法吗?_Jsf 2 - Fatal编程技术网

Jsf 2 这是集成ViewScope和RequestScope bean的正确方法吗?

Jsf 2 这是集成ViewScope和RequestScope bean的正确方法吗?,jsf-2,Jsf 2,我有一个由ViewScope托管Bean支持的页面。页面上有一个对话框(我使用的是primefaces),该对话框由请求范围的ManagedBean支持。我选择将对话框的托管bean请求设置为作用域,以便在启动对话框时将其清除(基本上,用例是用户打开对话框,填写一些数据,然后将数据添加到ViewScope托管bean支持的页面) 我集成这两个bean的方式是通过对话框的RequestScoped bean上的ManagedProperty。i、 e.ViewScoped bean被注入到Requ

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

我集成这两个bean的方式是通过对话框的RequestScoped bean上的ManagedProperty。i、 e.ViewScoped bean被注入到RequestScoped bean中。保存对话框时,对话框的RequestScoepd Bean上的actionListener方法将更新ViewScoped Bean上的属性,该Bean使用Bean的当前实例保存对RequestScoped ManagedBean的引用。然后,ViewScope托管bean上的actionListener由请求范围的bean调用。因此,ViewScoped托管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);
    }
}
@ManagedBean
@视域
公共类PageBackingBean
{
列出对话值;
对话价值对话价值;
public void setDialogValue(DialogValue DialogValue)
{
this.dialogValue=dialogValue);
}
公共DialogValue getDialogValue(){return DialogValue;}
public void handleDialogSave(ActionEvent事件)
{
添加(getDialogValue());
}
}
@ManagedBean
@请求范围
公共类对话框值
{
@ManagedProperty(#{pageBackingBean})
PageBackingBean PageBackingBean;
字符串val1;
字符串val2;
//为简洁起见,推荐了getter/setter。。。
公共无效对话框保存(ActionEvent事件)
{
pageBackingBean.setDialogValue(此);
pageBackingBean.handleDialogSave(事件);
}
}

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

public void dialogSave(ActionEvent event)
{
    pageBackingBean.getDialogValues().add(dialogValue);
}
也许可以将
DialogValue
重命名为
DialogBacking
或其他名称,至少它的名称不应该只是一个模型