Jsf 返回到支持bean中的同一视图,我应该返回null或空字符串或视图ID吗?

Jsf 返回到支持bean中的同一视图,我应该返回null或空字符串或视图ID吗?,jsf,view,navigation,Jsf,View,Navigation,当我的注册和登录命令按钮在它们的备份bean中调用它们的方法时,我希望在成功时重定向到索引,在失败时保持相同的视图。一切正常,成功时返回index?faces redirect=true。如果失败了,我现在意识到,我有不同的可能性:我可以返回注册或登录,也可以工作,即使返回null,我也会得到相同的结果。至少我看不出有什么不同 当结果应该是相同的视图时,是否有一个共同的样式返回什么 我可以返回注册或登录,同样有效,即使返回null,我也会得到相同的结果。至少我看不出有什么不同 关于无效和非无效结

当我的注册和登录命令按钮在它们的备份bean中调用它们的方法时,我希望在成功时重定向到索引,在失败时保持相同的视图。一切正常,成功时返回index?faces redirect=true。如果失败了,我现在意识到,我有不同的可能性:我可以返回注册或登录,也可以工作,即使返回null,我也会得到相同的结果。至少我看不出有什么不同

当结果应该是相同的视图时,是否有一个共同的样式返回什么

我可以返回注册或登录,同样有效,即使返回null,我也会得到相同的结果。至少我看不出有什么不同

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

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

正确的方法取决于具体的功能需求。如果要返回到同一视图,只需返回null或void not empty字符串。在这种情况下,通常不需要创建新视图。只有在当前视图中有视图构建时标记JSTL和friends,并且它们的模型值在bean操作方法中已更改,才需要通过返回空字符串强制重新构建视图。如果要导航到不同的视图,请返回所需的视图标识符,最好连同faces redirect=true一起返回,确保它是幂等书签

另见:
我最近将一个应用程序更新为JSF2,其中许多操作都返回空字符串。现在,它每次都会打印以下消息:viewidx、action Y和output@xuso的导航用例不匹配:咬紧牙关,让它们全部无效。