如何从 Facelet 页面导航
<p:commandLink action="xyz.xhtml">
或后备豆
<p:commandLink action="#{bean.redirect}">
public class Bean{
public String redirect(){
.....
return "xyz.xhtml";
}
}
彼此不同?
如何从 Facelet 页面导航
<p:commandLink action="xyz.xhtml">
或后备豆
<p:commandLink action="#{bean.redirect}">
public class Bean{
public String redirect(){
.....
return "xyz.xhtml";
}
}
彼此不同?
来自 xhtml 页面或支持 bean 的导航有何不同。
没有区别。这两个示例都调用 POST 请求并指示 JSF 呈现与给定结果相关联的视图。支持 bean 方法的唯一优点是它允许您预先执行一些业务逻辑,甚至以编程方式控制结果值。
但是,如果您根本没有任何业务逻辑并且只想拥有指向另一个页面的幂等链接,那么使用命令链接实际上是一种不好的做法。使用 POST 进行页面到页面导航对用户和 SEO 都不友好。目标页面不可收藏(URL 仍然是提交 POST 表单的页面之一),也不可搜索机器人抓取(它使用 JavaScript 提交隐藏表单)。
您应该改用普通链接。
<h:link outcome="xyz.xhtml">
这会生成一个包含完整 URL 的 SEO 友好<a>
元素,href
并最终生成一个用户友好的可收藏 URL。
查看p:commandLink
此处的文档,其中说明了以下action
属性:
执行命令时要处理的方法表达式或字符串结果。
现在,作为action="xyz.xhtml"
返回字符串xyz.xhtml
,您将被相应地重定向,并且action="#{bean.redirect}"
再次返回时xyz.xhtml
,您将根据返回的字符串再次重定向。