我什么时候应该使用<h:outputLink>
而不是<h:commandLink>
?
我知道a commandLink
生成一个HTTP帖子; 我猜这outputLink
将产生HTTP获取.也就是说,我读过的大多数JSF教程材料都是commandLink
(几乎?)使用的.
上下文:我正在实现一个小的演示项目,它显示了一个到用户页面的标题链接,就像Stack Overflow的......
......我不确定commandLink
(可能是?faces-redirect=true
用于书签)还是outputLink
正确的选择.
Bal*_*usC 193
使用属性中的适当URL <h:outputLink>
呈现一个完整的HTML <a>
元素,该URL href
触发可收藏的GET请求.它无法直接调用托管bean操作方法.
<h:outputLink value="destination.xhtml">link text</h:outputLink>
Run Code Online (Sandbox Code Playgroud)
使用提交(隐藏)POST表单的脚本<h:commandLink>
呈现HTML <a>
元素,onclick
并可以调用托管bean操作方法.它也需要放在一个<h:form>
.
<h:form>
<h:commandLink value="link text" action="destination" />
</h:form>
Run Code Online (Sandbox Code Playgroud)
在POST之后触发重定向的?faces-redirect=true
参数<h:commandLink>
(根据Post-Redirect-Get模式)仅在实际点击链接时改进了目标页面的可书写性(URL不再是"落后") ,但它不会href
将<a>
元素更改为完整的URL.它仍然存在#
.
<h:form>
<h:commandLink value="link text" action="destination?faces-redirect=true" />
</h:form>
Run Code Online (Sandbox Code Playgroud)
从JSF 2.0开始,还<h:link>
可以使用视图ID(导航案例结果)而不是URL.它将生成一个HTML <a>
元素以及正确的URL href
.
<h:link value="link text" outcome="destination" />
Run Code Online (Sandbox Code Playgroud)
因此,如果它是纯粹的,可收藏的页面到页面导航,如SO用户名链接,那么使用<h:outputLink>
或<h:link>
.这对于SEO来说也更好,因为机器人通常不会加密POST表单和JS代码.此外,随着页面现在可以添加书签并且URL不再"落后",UX将得到改进.
必要时,您可以在构造或做预处理工作@PostConstruct
一的@RequestScoped
或@ViewScoped
@ManagedBean
它连接到有问题的目标页面.您可以使用@ManagedProperty
或<f:viewParam>
将GET参数设置为bean属性.
归档时间: |
|
查看次数: |
101714 次 |
最近记录: |