什么时候应该使用h:outputLink而不是h:commandLink?
何时应该使用<h:outputLink>而不是<h:commandLink> ? 
 我明白,一个commandLink生成一个HTTPpost; 我猜outputLink会生成HTTP获取。 也就是说,我读过的大多数JSF教程材料都是独占使用commandLink (几乎?)。 
上下文:我正在实现一个小的演示项目,显示一个用户页面的标题链接,就像Stack Overflow的…

  …我不知道是否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快