如何在<p:ajax侦听器>方法中获取<f:attribute>值?



我有一个带有<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。有两种方法:

  1. 指定AjaxBehaviorEvent参数。为此,它提供了一种getComponent()方法。

    public void setChangedSOI(AjaxBehaviorEvent event) {
        UIComponent component = event.getComponent();
        String dummy = component.getAttributes().get("Dummy");
        // ...
    }
    
  2. 使用UIComponent#getCurrentComponent()辅助方法。

    public void setChangedSOI() {
        UIComponent component = UIComponent.getCurrentComponent(FacesContext.getCurrentInstance());
        String dummy = component.getAttributes().get("Dummy");
        // ...
    }
    

相关内容

  • 没有找到相关文章

最新更新