gpt4 book ai didi

JSF 2 : What scope should i use?

转载 作者:行者123 更新时间:2023-12-04 20:22:04 26 4
gpt4 key购买 nike

我对应该使用哪个范围感到困惑。

我这里有一个模块,它由 4 级页面组成,例如页面浏览 - 页面标题 - 该标题的页面详细信息 - 该详细信息的页面子详细信息。我认为每个页面都会有它自己的 managedbean。

最深的级别,第 4 级(子详细信息页面),将能够访问外层中每个其他受管 bean 的状态。级别 3(详细信息页面)可以访问级别 2 managedbean 的状态(标题页面)和级别 1 managedbean 的状态(浏览)。

外层managedbean无法访问深层managedbean的状态

使用请求范围是行不通的,因为深层页面需要访问外层的其他状态。

使用session scope可以,但是当用户切换到其他不相关的程序模块时会消耗内存,而那些未使用的bean将在session中停留在内存中。而且,我无法在不同的选项卡中打开这些页面链。

使用对话范围也让我感到困惑,因为我没有像向导样式页面或测验页面那样清晰的 begin() 和 end() 。用户可以在这些页面上来回切换并在任何页面中执行操作。

使用 View 范围似乎是可能的,但我必须使用从一个页面传递到另一个页面的参数。更深层次的 bean 将无法访问外部 bean,但它们可以从上一页接收字符串参数。这有点难看,因为我可能需要再次从数据库中查询许多信息,而这些信息本可以在以前的托管 bean 中完成。

我是不是想错了?

请分享您的想法。

谢谢你,
阿尔伯特·金

最佳答案

JSF 2 中新的 Flash 作用域可能对您有所帮助。可以把它想象成一个 Session 范围,它在读取一次后就被清除了。它与其他范围有点不同,因为它不是注释,而是 Map。您可以将第 2 页所需的第 1 页中的所有信息放入 flash 范围,在第 2 页中通过 PostConstruct 注释方法读取它,然后放入第 3 页所需的所有数据,依此类推。有点乱,但至少你不需要使用 View 参数。实际的托管 bean 可以是 Requestscoped。它看起来像这样:

Level1Bean

@public String toLevel2Button(){
ELFlash.getFlash().put("data1", object1);
ELFlash.getFlash().put("data2", object2);
return "level2";

Level2Bean

@PostConstruct
public void init(){
object1 = (MyType1)ELFlash.getFlash().get("data1");
object2 = (MyType2)ELFlash.getFlash().get("data2");
}

public String toLevel3(){
ELFlash.getFlash().put("data1", object1);
ELFlash.getFlash().put("data2", object2);
ELFlash.getFlash().put("data3", object3);
return "level3";
}

你可以找到一个简短的例子here .闪存范围也可以直接从 View 中读取。除此之外,我想不出有什么方法可以在不使用 View 参数的情况下在 View 之间传输数据。

关于JSF 2 : What scope should i use?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4386455/

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