如何从PF selectManyCheckbox获取所选项目?

问题描述 投票:0回答:2

我有一个selectManyCheckbox,其中显示了项目列表,每当我选择一个项目时,我都希望触发后备bean上的回调,然后获取所选项目的值,以便对该值进行一些过滤。我的问题是我无法执行后备bean方法。尝试了几种方法,这是我的代码

1

<h:form class="block filter image-list-filter">
   <div class="title-block"> FILTER </div>
       <div class="content">
           <ul class="filter-block">
               <p:selectManyCheckbox id="vals" layout="grid" 
                   valueChangeListener="#{bean.selectFilter}" onchange="submit();">
                  <p:ajax event="click" process="@form" update="@all"/>
                  <f:selectItems value="#{bean.options}" var="filter" 
                        itemValue="#{filter.idFilter}" itemLabel="#{filter.descr}" 
                        itemDescription="#{filter.image}"/>
               </p:selectManyCheckbox>
            </ul>
        </div>
</h:form>

2

<p:selectManyCheckbox id="vals" layout="grid">
     <p:ajax event="click" process="@form" update="@all" 
           listener="#{bean.selectFilter}" />
     <f:selectItems value="#{bean.options}" var="filter" 
         itemValue="#{filter.idFilter}" itemLabel="#{filter.descr}" 
         itemDescription="#{filter.image}"/>
</p:selectManyCheckbox>

3

<p:selectManyCheckbox id="vals" layout="grid" 
      valueChangeListener="#{bean.selectFilter}">
      <p:ajax event="click" process="@form" update="@all"/>
      <f:selectItems value="#{bean.options}" var="filter" 
          itemValue="#{filter.idFilter}" itemLabel="#{filter.descr}" 
               itemDescription="#{filter.image}"/>
</p:selectManyCheckbox>

Backing Bean方法

public void selectFilter(ValueChangeEvent dege) {
   Object[] selFilters = (Object[]) dege.getNewValue();
   if (selFilters.length != 0) {
       //Do stuff
   }
}

options属性是存储可用值的特定对象的ArrayList。当然,此属性具有setter和getter。 PF版本为5.0

jsf primefaces
2个回答
2
投票

您的代码中有很多事情与我做的事情有很大不同,这使我很难确切地确定是什么导致了问题。相反,我将解释我将如何解决它:

Component:

<p:selectManyCheckbox id="vals" layout="grid" value="#{bean.selectedValue}">
    <p:ajax listener="#{bean.selectFilter}" update="@all"/>
        <f:selectItems value="#{bean.options}" var="filter" 
            itemValue="#{filter.idFilter}" itemLabel="#{filter.descr}" 
            itemDescription="#{filter.image}"/>
</p:selectManyCheckbox>

Bean:

private Object[] selectedValue;
public Object[] getSelectedValue(){
    return selectedValue;
}

public void setSelectedValue(Object[] newValue){
    selectedValue = newValue;
}

public void selectFilter(){
    Object[] selFilters = getSelectedValue();
    if (selFilters.length != 0) {
        //Do stuff
    }
}

据我所知,这是标准的处理方式,通过常规属性设置器提交值,然后在诸如selectFilter之类的触发方法中与之交互。我也不鼓励使用update="@all",因为这会刷新整个页面。仅更新页面中实际更改为update="@(.image-list)"之类的部分,通常会提供更好的用户体验。


0
投票

要获取选定的项目,请使用h:form标签!

© www.soinside.com 2019 - 2024. All rights reserved.