【问题标题】:JSF, How to set a property in a different page/backing bean and then navigate to that page?JSF,如何在不同的页面/支持 bean 中设置属性,然后导航到该页面?
【发布时间】:2010-04-23 15:00:25
【问题描述】:

我正在使用 JSF 2.0 并尝试在我的应用程序的不同页面之间传递值。

设置如下: 我有一个名为 userSelect 的页面,它有一个支持 bean userSelectBacking。在此页面上,我显示了一个可以使用 h:commandbutton 选择和提交的用户列表,当页面提交时,导航转到 userEdit 页面。

我有一个名为 userEdit 的页面,它有一个支持 bean userEditBacking,它显示用户的信息 并允许编辑该用户。

我想将从 userSelect 页面选择的用户传递到 userEdit 页面。 我目前正在使用 f:setPropertyActionListener 在 userSelect 页面的 userEdit 支持中设置用户,但是当我导航到 userEdit 页面时,它会丢失我设置的信息。

有没有办法可以在两个页面/支持 bean 之间传递值?

谢谢

【问题讨论】:

    标签: java jsf


    【解决方案1】:

    我目前正在使用 f:setPropertyActionListener 在 userSelect 页面的 userEdit 支持中设置用户

    它应该可以工作。

    但是,当我导航到 userEdit 页面时,它会丢失我设置的信息。

    如果数据加载逻辑错误,或者您之后在 bean 是请求范围内触发重定向,就会发生这种情况。

    要修复数据加载逻辑,只需确保在请求范围 bean 的情况下,在后续请求中保留相同的数据模型。通常,您为此使用 bean 的构造函数或在 getter 中延迟加载。如果这不是一个选项,那么您需要将 bean 放在更广泛的范围内,例如@ViewScope@SessionScope

    要解决重定向问题,要么不触发重定向(即从导航案例中删除 <redirect/>,要么不调用 ExternalContext#redirect()),或者将 bean 放在更广泛的范围内。

    【讨论】:

    • 谢谢!重定向确实是问题所在!
    • @BalusC - 我遇到了一个新问题,当我尝试在我的 userEdit 页面中编辑用户实体时,即使它显示正确,我也会收到实体为空的错误。如果它有所作为,我正在使用值绑定。你有什么理由会这样吗?
    • 您需要保留实体或将 bean 放在更广泛的范围内。以@ViewScope开头。
    • 保存实体到底是什么意思?我不确定我应该在构造函数中将用户设置为什么......我的印象是它是由 setpropertyactionlistener 动态设置的......如果你有一个很好的教程来解决这个问题,那就太多了赞赏
    • 如果 bean 是请求范围的,您需要确保其构造函数和 getter 在后续请求中返回完全相同的实体。你知道,一个请求范围的 bean 的生命周期只有一个 HTTP 请求。在完成 HTTP 请求后(发送响应后),它会立即被丢弃。显示列表的请求是一个请求。编辑项目的请求是另一个请求。保存项目的请求又是另一个请求。有 3 个独立的 bean 实例。您已将实体从请求 1 传递到 2,但没有从 2 传递到 3。
    猜你喜欢
    • 1970-01-01
    • 2010-11-08
    • 2018-04-04
    • 1970-01-01
    • 1970-01-01
    • 2011-02-16
    • 2012-06-30
    • 1970-01-01
    • 2011-04-07
    相关资源
    最近更新 更多