【问题标题】:Returning to same view in backing bean, should I return null or empty string or view ID?返回支持 bean 中的相同视图,我应该返回 null 或空字符串还是视图 ID?
【发布时间】:2016-08-08 16:09:35
【问题描述】:

当我的commandButtons 为signuplogin 在他们的支持bean 中调用他们的方法时,我想在成功时重定向到index,并在失败时保持相同的视图。一切正常,我成功返回"index?faces-redirect=true"。我现在意识到失败的情况,我有不同的可能性:我可以返回"signup"(或"login"),"" 也可以,即使我返回null,我也会得到相同的结果。至少我无法发现任何差异。

有没有通用的样式返回什么,什么时候结果应该是同一个视图?

【问题讨论】:

    标签: jsf view navigation


    【解决方案1】:

    我可以返回"signup"(或"login"),"" 也有效,即使我返回null,我也会得到相同的结果。至少我无法发现任何差异。

    null 和非null 结果方面实际上存在技术差异。 null(或void)结果将重用相同的视图。非null 结果将丢弃当前视图并创建一个全新的视图,即使它返回相同的视图标识符。 “视图”在这里是 UIViewRoot 实例,包括其所有状态。空字符串表示“当前视图 ID”。

    值得注意的是@ViewScoped bean 受此影响。它们将与视图一起被丢弃并重新创建。但是,如果您使用的是 @RequestScoped bean,那么您确实不会注意到 bean 行为的任何技术差异。当视图被丢弃时它不会被丢弃,但只有在请求结束时才会被丢弃。换句话说,即使在同一个请求中重新创建同一个视图,也会使用同一个@RequestScoped bean。

    正确的方法取决于具体的功能要求。如果要返回相同的视图,只需返回nullvoid(不是空字符串)。在这种情况下,通常不需要创建新视图。仅当您在当前视图中具有视图构建时间标记(JSTL 和朋友),其模型值已在 bean 操作方法中更改时,您才需要通过返回空字符串来强制重建视图。如果您想导航到不同的视图,请返回所需的视图标识符,最好与faces-redirect=true 一起返回,以确保它是幂等的(可添加书签)。

    另见:

    【讨论】:

    • 我最近将一个应用程序更新到 JSF2,其中很多操作都返回一个空字符串。现在它每次都打印以下消息:No navigation case match for viewId X, action Y and outcome
    • @xuso:咬紧牙关,把它们都做成void
    猜你喜欢
    • 2012-06-16
    • 1970-01-01
    • 2013-08-02
    • 1970-01-01
    • 2011-06-03
    • 2019-10-28
    • 1970-01-01
    • 2012-02-29
    • 1970-01-01
    相关资源
    最近更新 更多