【问题标题】:Navigating views while using Session and View Scoped managed beans JSF 2.0在使用 Session 和 View Scoped managed beans JSF 2.0 时导航视图
【发布时间】:2012-08-07 19:12:45
【问题描述】:

这是我正在尝试做的一个例子。

在 sessionScoped bean 中

SessionBeanloadRecord(){
Do something
ViewScopedBean viewScopedBean = (ViewScopedBean) context.getApplication().evaluateExpressionGet(context, "#{viewScopedBean}", ViewScopedBean.class);
return viewScopedBean.viewScopedBeanLoadRecord();
}

在 viewScoped bean 中

ViewScopedBeanloadRecord(){
Retrieve and populateFields    
return "viewRecord.xhtml";    
}

因此,简而言之,我想从另一个视图 (listRecords.xhtml) 上的另一个 bean 调用视图范围 bean 中的一个方法。 当我运行它(仅使用标准命令链接)时,会话 bean 会按预期工作,创建 viewScoped bean 并调用 ViewScopedBeanloadRecord 方法但是然后重新创建 viewScoped bean(再次调用构造函数)但这次是 ViewScopedBeanloadRecord未运行,页面加载空白字段。

我了解视图范围的 bean 仅在您返回 null(或具有 void 方法)以保持在同一视图上时才有效,但是您如何从 listRecords.xhtml 转换到 viewRecord.xhtml 并运行加载方法?

一旦我进入 viewRecord.xhtml 视图,我还需要同时加载更多记录(在不同的浏览器窗口中),因此我无法将记录保留在会话中。

请注意:根据公司政策,我不允许发布实际代码,所以这个示例仅限于我。对不起!

任何帮助将不胜感激!

谢谢

埃里克

【问题讨论】:

    标签: java jakarta-ee jsf-2


    【解决方案1】:

    我们遇到了类似的问题,我们通过使用@SessionScoped bean 作为整个会话的支持 bean 来解决它。我们将其注入到其他 @ViewScoped@RequestScoped bean 中,管理会话中所需的数据。

    另一种方法是使用 GET 参数。

    记住 bean 的生命周期,并使用不同的函数来污染数据。 @PostConstruct 注解也很方便。

    祝你好运:)

    【讨论】:

    • 所有都在使用这个解决方案,因为它们总是被引用,所以 JVM 在会话结束之前永远不会销毁它们。就像你所有的 bean 都被标记为“sessionScoped”。
    【解决方案2】:

    在与 Requestscoped、Viewscoped 和 @PostConstruct 进行了斗争并尝试了不同的组合之后,我无法让这个场景正常工作。我还使用动态包含文件,这些文件依赖于 bean 中的属性来决定要构建哪个 xhtml 文件,这在使用 viewScope 和 @PostConstruct 时似乎会导致问题。

    所以我选择了一个完全基于会话的解决方案。

    我在会话 bean 中创建了一个类型为“record”的属性,而不是 viewScoped 或 requestScoped bean,每当调用 sessionbean 中的视图记录方法时,我将之前的记录属性替换为新的,然后转发到显示记录视图。因此,它创建了一种“请求”记录属性,每次对视图记录方法的新调用都会覆盖该属性。所以只有最后一次记录的观看会留在会话中。

    我已经阅读了<t:saveState> 标签,它可能会解决这个问题,但作为一个项目,它决定不在 JSF 之上使用任何额外的框架,所以这不是一个选择。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-05
      • 2014-02-02
      • 2011-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多