我怀疑通过属性传递值的两种方式。
首先: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");
有谁知道第一和第二之间有什么不同?
哪种情况适合使用第一种方法?
答案 0 :(得分:1)
首先,如果要设置自定义属性,则不能仅向标记添加随机新属性,因为JSF会忽略不受支持的标记属性。 BalusC提供了一些如何在this answer中解决此问题的方法。
如果要向查询字符串或请求参数添加值,则应使用 f:param
。它应该与命令组件一起使用(例如h:commandButton
,h:commandLink
或h:outputLink
)。
f:attribute
将条目添加到组件的属性Map中。