问题描述
如果我有一个要链接到的JSF页面,我不需要在该页面上传达任何信息,并且不需要在要链接的页面上执行任何验证,那么我应该始终使用h:link?
If I have a JSF page that I want to link to where I don't need to communicate anything to that page and don't need to perform any validation on the page I'm linking from, should I always use an h:link?
是否通过不使用h:commandLink(带有Instant ="true"或execute ="@ this")丢失任何内容?
Do I lose anything by not using a h:commandLink (with immediate="true" or execute="@this")?
在这种情况下,h:link和h:commandLink之间是否有区别?
Is there any difference between h:link and h:commandLink in this scenario?
推荐答案
h:link
将触发完整的GET请求.仅JSF生命周期阶段1(恢复视图)和阶段6(渲染响应)将被调用.没有转换,没有验证,没有任何动作.
The h:link
will fire a full GET request. Only JSF lifecycle phases 1 (restore view) and 6 (render response) will be invoked. No conversion, no validation, no action.
因此immediate="true"
和execute="@this"
将不起作用(它们对于h:link
完全不可用).
Thus immediate="true"
and execute="@this"
won't work (they are not available for h:link
at all).
使用h:link
进行纯页到页面导航,如果需要在服务器上处理输入数据,则使用h:commandLink
(触发POST请求).
Use h:link
for pure page to page navigation and h:commandLink
(which fires a POST request) if input data needs to be processed on the server.
附录:
如果目标页面包含f:viewParam
,则根据BalusC的注释生命周期,第2到第5阶段不会被GET请求跳过.
As per BalusC's comment lifecycle phases 2 to 5 are not skipped for a GET request if the target page contains f:viewParam
s.
这篇关于什么时候应该使用h:link而不是h:commandLink?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!