什么时候应该使用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快