如何在 <p:ajax listener> 方法中获取 <f:attribute> 值?
How to get <f:attribute> value inside <p:ajax listener> method?
我有一个带有 <f:attribute>
和 <p:ajax listener>
的复选框组件。
<h:selectManyCheckbox ...>
<p:ajax listener="#{locationHandler.setChangedSOI}" />
<f:attribute name="Dummy" value="test" />
...
</h:selectManyCheckbox>
我尝试在侦听器方法中获取 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 请求参数传递。组件属性设置为.. 呃,组件属性。 IE。它们存储在 UIComponent#getAttributes()
中。你可以通过那张地图抓住他们。
现在正确的问题显然是如何在 ajax 侦听器方法中获得所需的 UIComponent
。有两种方法:
为此指定 AjaxBehaviorEvent
argument. It offers a 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");
// ...
}
我有一个带有 <f:attribute>
和 <p:ajax listener>
的复选框组件。
<h:selectManyCheckbox ...>
<p:ajax listener="#{locationHandler.setChangedSOI}" />
<f:attribute name="Dummy" value="test" />
...
</h:selectManyCheckbox>
我尝试在侦听器方法中获取 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 请求参数传递。组件属性设置为.. 呃,组件属性。 IE。它们存储在 UIComponent#getAttributes()
中。你可以通过那张地图抓住他们。
现在正确的问题显然是如何在 ajax 侦听器方法中获得所需的 UIComponent
。有两种方法:
为此指定
AjaxBehaviorEvent
argument. It offers agetComponent()
方法。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"); // ... }