p:param和custom属性有什么不同

时间:2014-11-28 09:26:27

标签: jsf jsf-2 primefaces

我怀疑通过属性传递值的两种方式。

首先:f:param

<p:inputText value="#{inputTextView.inputVal}">
    <f:param name="fieldA" value="inputA" />
    <p:ajax process="@form" update="@form"></p:ajax>
</p:inputText>

第二:自定义字段

<p:inputText value="#{inputTextView.inputVal}"
             fieldB="inputB">
    <p:ajax process="@form" update="@form"></p:ajax>
</p:inputText>

第一种方式,我可以使用

获取属性值
FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("fieldA");

虽然第二种方式使用

UIComponent.getCurrentComponent(FacesContext.getCurrentInstance()).getAttributes().get("fieldB");

有谁知道第一和第二之间有什么不同?

哪种情况适合使用第一种方法?

1 个答案:

答案 0 :(得分:1)

首先,如果要设置自定义属性,则不能仅向标记添加随机新属性,因为JSF会忽略不受支持的标记属性。 BalusC提供了一些如何在this answer中解决此问题的方法。

如果要向查询字符串或请求参数添加值,则应使用

f:param。它应该与命令组件一起使用(例如h:commandButtonh:commandLinkh:outputLink)。

另一方面,

f:attribute将条目添加到组件的属性Map中。