如何在JSF中导航?如何使URL反映当前页面(而不是上一页)
我目前正在学习JSF,当我意识到无论何时使用如何在JSF中导航?如何使URL反映当前页面(而不是上一页),jsf,url,redirect,navigation,Jsf,Url,Redirect,Navigation,我目前正在学习JSF,当我意识到无论何时使用,JSF的标准行为都是在浏览器中始终显示上一页的URL,而不是当前页的URL时,我感到相当惊讶和困惑 我理解,这与JSF总是将表单发布到同一页面,然后将控制器返回给浏览器的任何页面呈现给浏览器的方式有关,而浏览器不知道页面位置已更改 看来JSF已经存在了足够长的时间,必须有一个干净、可靠的方法来处理这个问题。如果是,您介意与我们分享吗? 我已经找到了各种解决办法,但遗憾的是,似乎没有什么真正的解决方案 简单地接受URL是误导性的 将“?faces r
,JSF的标准行为都是在浏览器中始终显示上一页的URL,而不是当前页的URL时,我感到相当惊讶和困惑
我理解,这与JSF总是将表单发布到同一页面,然后将控制器返回给浏览器的任何页面呈现给浏览器的方式有关,而浏览器不知道页面位置已更改
看来JSF已经存在了足够长的时间,必须有一个干净、可靠的方法来处理这个问题。如果是,您介意与我们分享吗?
我已经找到了各种解决办法,但遗憾的是,似乎没有什么真正的解决方案
- 简单地接受URL是误导性的
- 将
附加到每个bean操作的返回值,然后“?faces redirect=true”
- 找出如何用其他东西(闪存范围、CDI对话、@SessionScoped、…)替换
)@RequestScoped
- 接受每个用户操作有两个HTTP往返
- 找出如何用其他东西(闪存范围、CDI对话、@SessionScoped、…)替换
- 使用某种方法(例如,第三方库或自定义代码)在URL中隐藏页面名称,对每个页面始终使用相同的通用URL
如果
“?faces redirect=true”
的效果很好,那么有没有一种方法可以配置整个应用程序以这种方式处理所有请求?事实上,JSF作为一个基于表单的应用程序目标MVC框架将POST表单提交到与表单请求带有
的页面相同的URL。您可以通过查看生成的HTML输出的
URL来确认它。这在web开发术语中称为回发。默认情况下,回发上的导航不会导致对新URL的新请求,而是将目标页面作为响应的内容加载。当您只需要页面到页面的导航时,这确实令人困惑
通常,导航/重定向的正确方法取决于业务需求和请求的(请阅读:“书签能力”)(注意:有关具体的代码示例,请参阅下面的“请参阅”链接)
- 如果请求是幂等的,只需使用GET表单/链接而不是POST表单(即使用
@ViewScoped
。谢谢!请原谅我的无知(再次)。为什么JSF的设计者不使用为浏览器的“后退”按钮存储的URL来知道发回帖子的位置,而不是弄乱浏览器的URL。毫无疑问,这是一个技术原因,但这是唯一让我对JSF感到恼火的事。它搞砸了:从子文件夹中出来时CSS文件的位置;书签;等等因此,容器安全性,因为它将愉快地显示一个安全页面,因为容器安全性是查看当前URL,并查看上一个页面,而不是实际的当前假定安全页面。正如所回答的,只是不要使用POST进行页到页导航。这里解决了一个非常类似的问题,以防有人需要它