当我的commandButton
s for signup
和login
在其支持bean中调用它们的方法时,我希望在成功时重定向到index
,在失败时保持相同的视图。一切都很好,我在成功时返回"index?faces-redirect=true"
。如果失败,我现在意识到,我有不同的可能性:我可以返回"signup"
(或"login"
),""
也可以工作,甚至当我返回null
时,我也会得到相同的结果。至少我看不出有什么不同。
当结果应该是相同的视图时,是否有一个共同的样式返回什么?
我可以返回
"signup"
(或"login"
),""
也可以工作,即使当我返回null
时,我也会得到相同的结果。至少我看不出有什么不同
实际上,null
和非null
的结果存在技术差异。null
(或void
)结果将重用相同的视图。非null
结果将丢弃当前视图并创建一个全新的视图,即使它返回相同的视图标识符。";视图";这里是包括其所有状态的CCD_ 19实例。空字符串表示";当前视图ID";。
值得注意的是,@ViewScoped
bean会受到此影响。它们将被丢弃,并与景观一起重建。然而,如果您使用的是@RequestScoped
bean,那么您确实不会注意到bean行为的任何技术差异。当视图被破坏时,它不会被破坏,但只有当请求结束时才会被破坏。换句话说,即使在同一个请求中重新创建了相同的视图,也会在其上使用相同的@RequestScoped
bean
正确的方法取决于具体的功能需求。如果要返回到同一视图,只需返回null
或void
(非空字符串)。在这种情况下,通常没有必要创建新的视图。只有当当前视图中的视图构建时间标记(JSTL和friends)的模型值在bean操作方法中发生了更改时,才需要通过返回空字符串来强制重建视图。如果您想导航到不同的视图,请返回所需的视图标识符,最好与faces-redirect=true
一起返回,以确定它是否是幂等的(可添加书签)。
另请参阅:
- 如何在JSF中导航?如何使URL反映当前页面(而不是上一页)
- 托管bean中View和Request作用域之间的差异
- 什么';视图构建时间是多少