- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我对应该使用哪个范围感到困惑。
我这里有一个模块,它由 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/
我是一名优秀的程序员,十分优秀!