comanndButton和commandLink
会发送回本页面,并触发JSF的生命周期,比如:重建组件树、应用请求值等,因此,允许设置actionListener和action属性,这样他们可以很轻松完成强大的功能。不足在于:如果重建组件树的成本比较高(比如:当前页面显示一个数据表格),而这些组件对于即将跳转到的页面没什么用时,就应该考虑使用outputLink了。
另外:如果需要传递参数<f:param.../>,使用commandLink
在action或actionListener中获取<f:param.../>:
FacesContext ctx
=
FacesContext.getCurrentInstance();
int productId = Integer.parseInt((String)ctx.getExternalContext().getRequestParameterMap().get( " productId " ));
int productId = Integer.parseInt((String)ctx.getExternalContext().getRequestParameterMap().get( " productId " ));
outputLink
比起前两个来说,他相当的轻量级了。他会直接产生一个<a href=""></a>链接,跳转到相应的页面,因此没有进入JSF生命周期的额外开销,跟我们直接写一个html的链接没什么区别。
如果需要传递参数,嵌入<f:param name="a" value="b"/>就可以了,当然这里的value可以用表达式来表示,比如value="#{param.productId}",用起来是相当方便的。
<
h:outputLink
value
="productEdit.faces"
>
< h:outputText value ="编辑" />
< f:param name ="productId" value ="#{item.productId}" />
</ h:outputLink >
< h:outputText value ="编辑" />
< f:param name ="productId" value ="#{item.productId}" />
</ h:outputLink >