Jsf 2 这是集成ViewScope和RequestScope bean的正确方法吗?
我有一个由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 这是一个很好的方法来做我想做的事情,还是有更好的方法 示例代码: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
@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
或其他名称,至少它的名称不应该只是一个模型