什么时候应该使用h:outputLink而不是h:commandLink?

何时应该使用<h:outputLink>而不是<h:commandLink>

我明白,一个commandLink生成一个HTTPpost; 我猜outputLink会生成HTTP获取。 也就是说,我读过的大多数JSF教程材料都是独占使用commandLink (几乎?)。

上下文:我正在实现一个小的演示项目,显示一个用户页面的标题链接,就像Stack Overflow的…

需要更多的jQuery

…我不知道是否commandLink (也许使用?faces-redirect=true为书签)或outputLink是正确的select。

<h:outputLink>呈现一个完整的HTML <a>元素,在href属性中具有适当的URL,可以触发可collections的GET请求。 它不能直接调用托pipebean的操作方法。

 <h:outputLink value="destination.xhtml">link text</h:outputLink> 

<h:commandLink>用一个onclick脚本渲染一个HTML <a>元素,该脚本提交一个(隐藏的)POST表单,并可以调用一个托pipe的bean操作方法。 它也需要放在<h:form>

 <h:form> <h:commandLink value="link text" action="destination" /> </h:form> 

<h:commandLink>上的<h:commandLink> ?faces-redirect=true参数会在POST之后触发一个redirect(按照Post-Redirect-Get模式),只有在实际点击链接时才会提高目标页面的可collections性URL不会再“落后”),但它不会将<a>元素的href更改为完整的URL。 它仍然是#

 <h:form> <h:commandLink value="link text" action="destination?faces-redirect=true" /> </h:form> 

自JSF 2.0以来,也有<h:link>可以取得一个视图ID(一个导航案例结果)而不是一个URL。 它将生成一个HTML <a>元素以及href的正确URL。

 <h:link value="link text" outcome="destination" /> 

所以,如果是像SO用户名链接那样的纯粹的书签式页面到页面导航,那么可以使用<h:outputLink><h:link> 。 这对于search引擎优化也更好,因为机器人通常不encryptionPOSTforms和JS代码。 而且,由于页面现在可collections,并且URL不再“落后”,用户体验将得到改善。

必要时,可以在构造函数中执行预处理作业,或者在连接到相关目标页面的@RequestScoped@ViewScoped @ManagedBean @PostConstruct中执行预处理作业。 您可以使用@ManagedProperty<f:viewParam>将GET参数设置为bean属性。

也可以看看:

  • ViewParam vs @ManagedProperty(value =“#{param.id}”)
  • 什么可以使用<f:元数据>,<f:viewParam>和<f:viewAction>?
  • 可collections性通过查看参数function
  • 如何在JSF中导航? 如何使URL反映当前页面(而不是以前的页面)

我也看到,页面加载(性能)使用h:commandLink比h:link需要很长时间。 h:链接比h:commandLink快