我有一个带有<f:attribute>
和<p:ajax listener>
的复选框组件。
<h:selectManyCheckbox ...>
<p:ajax listener="#{locationHandler.setChangedSOI}" />
<f:attribute name="Dummy" value="test" />
...
</h:selectManyCheckbox>
我尝试在listener方法中获取test
的<f:attribute>
值,如下所示:
public void setChangedSOI() throws Exception {
FacesContext context = FacesContext.getCurrentInstance();
Map<String, String> map = context.getExternalContext().getRequestParameterMap();
String r1 = map.get("Dummy");
System.out.println(r1);
}
然而,它打印了null
。我怎样才能拿到它?
组件属性不会作为HTTP请求参数传递。组件属性设置为。。呃,组件属性。即它们存储在CCD_ 6中。你可以在地图上找到它们。
现在,正确的问题显然是如何在ajax监听器方法中获得所需的UIComponent
。有两种方法:
-
指定
AjaxBehaviorEvent
参数。为此,它提供了一种getComponent()
方法。public void setChangedSOI(AjaxBehaviorEvent event) { UIComponent component = event.getComponent(); String dummy = component.getAttributes().get("Dummy"); // ... }
-
使用
UIComponent#getCurrentComponent()
辅助方法。public void setChangedSOI() { UIComponent component = UIComponent.getCurrentComponent(FacesContext.getCurrentInstance()); String dummy = component.getAttributes().get("Dummy"); // ... }