gpt4 book ai didi

jsf-2 - 这是集成 ViewScoped 和 RequestScoped bean 的正确方法吗?

转载 作者:行者123 更新时间:2023-12-04 15:47:06 24 4
gpt4 key购买 nike

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

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

最佳答案

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

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

也许重命名 DialogValueDialogBacking或者别的什么,至少它的名字不应该暗示它只是一个模型。

关于jsf-2 - 这是集成 ViewScoped 和 RequestScoped bean 的正确方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9824462/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com