当commandButton
和signup
login
在他们的支持bean中调用他们的方法时,我想在成功时重定向到index
,并在保持相同的视图时失败。一切正常,我会在成功时返回"index?faces-redirect=true"
。我现在意识到失败的情况,我有不同的可能性:我可以返回"signup"
(或"login"
),也""
工作,甚至当我返回null
时我得到了相同的结果。至少我无法发现任何差异。
当结果应该是相同的视图时,是否有一个共同的样式返回什么?
答案 0 :(得分:2)
我可以返回
"signup"
(或"login"
),也可以""
投放,即使我返回null
,我也会得到相同的结果。至少我无法发现任何差异。
null
和非null
结果实际上存在技术差异。 null
(或void
)结果将重复使用相同的视图。非null
结果将废弃当前视图并创建全新视图,即使它返回相同的视图标识符也是如此。 "视图"在这里UIViewRoot
实例包括它的所有状态。空字符串表示"当前视图ID"。
值得注意的是@ViewScoped
bean受此影响。它们将与视图一起被删除并重新创建。但是,如果您使用@RequestScoped
bean,那么您确实没有注意到bean行为的任何技术差异。当视图被删除时,它不会被删除,但只有在请求结束时才会被删除。换句话说,即使在同一个请求中重新创建相同的视图,也会在其上使用相同的@RequestScoped
bean。
正确的方法取决于具体的功能要求。如果要返回到同一视图,只需返回null
或void
(不是空字符串)。在这种情况下,创建新视图通常是不必要的。只有当您在当前视图中拥有视图构建时间标记(JSTL和朋友)时,其模型值已在bean操作方法中更改,那么您需要通过返回空字符串来强制重建视图。如果您想要导航到其他视图,请返回所需的视图标识符,最好与faces-redirect=true
一起,以确定它是否是幂等的(可收藏)。