【问题标题】:Difference in navigation by action="xyz" and action="#{bean.returnXyz}"action="xyz" 和 action="#{bean.returnXyz}" 的导航差异
【发布时间】:2013-04-10 07:39:55
【问题描述】:

如何从 Facelet 页面导航

<p:commandLink action="xyz.xhtml">

或一个支持 bean

<p:commandLink action="#{bean.redirect}">
public class Bean{
   public String redirect(){
       .....
       return "xyz.xhtml";
   }
 }

彼此不同?

【问题讨论】:

  • 您实际上是在 none 的示例中重定向!你正在做的是转发。
  • 对不起。我的意思是导航。我已经编辑了问题。
  • 命令组件(链接、按钮)用于调用表单提交,从而在服务器上执行一些业务操作,并根据提交的数据返回导航案例结果。使用命令组件充当普通导航链接被认为是一种非常糟糕的做法。所以你的redirect 实际上是performAction,它返回一个导航案例结果。
  • 是正确的,但是您的方法直接返回 .xhtml 文件名,这不是开发的好方法..导航使一个面孔- navigation.xml 文件并在此文件中定义导航案例并从您的 bean 方法返回案例

标签: jsf-2 navigation facelets


【解决方案1】:

从一个 xhtml 页面或一个支持 bean 的导航有何不同。

没有区别。这两个示例都调用 POST 请求并指示 JSF 呈现与给定结果关联的视图。支持 bean 方法的唯一优点是它允许您预先执行一些业务逻辑,甚至可以通过编程方式控制结果值。

但是,如果您根本没有任何业务逻辑并且只想拥有指向另一个页面的幂等链接,那么使用 command 链接实际上是一种不好的做法。使用 POST 进行页面到页面导航对用户和 SEO 都不友好。目标页面不可收藏(URL 仍然是提交 POST 表单的页面之一),也不可搜索机器人抓取(它使用 JavaScript 提交隐藏表单)。

您应该改用普通链接。

<h:link outcome="xyz.xhtml">

这会生成一个 SEO 友好的 &lt;a&gt; 元素,其 href 中包含完整的 URL,并最终生成一个用户友好的可书签 URL。

另见:

【讨论】:

    【解决方案2】:

    查看p:commandLinkhere 的文档,其中对action 属性的说明如下:

    命令执行时要处理的方法表达式或字符串结果 执行。

    现在,当action="xyz.xhtml" 返回字符串xyz.xhtml 时,您将被相应地重定向,而对于再次返回xyz.xhtmlaction="#{bean.redirect}",您将再次根据返回的字符串重定向。

    【讨论】:

      猜你喜欢
      • 2013-09-10
      • 1970-01-01
      • 1970-01-01
      • 2022-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多