【问题标题】:How to get selected items from p:selectManyCheckbox?如何从 p:selectManyCheckbox 中获取所选项目?
【发布时间】:2014-11-26 08:28:30
【问题描述】:

我有一个 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>

支持 Bean 方法

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

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

【问题讨论】:

  • 您可能需要使用转换器。看看 BalusC 的这个问题,它应该会有所帮助:stackoverflow.com/questions/14060246/…
  • @Pellizon 尝试使用转换器但没有成功。选择项目时不调用任何方法 =(
  • 你的 PF 版本是多少?我知道旧版本的 valueChangeListener 存在一些错误。另外,删除那个 onchange=submit(),它可能会破坏你的 ajax 请求
  • @Pellizon 我的 Pf 版本是 5.0 已经尝试删除提交,但仍然没有
  • &lt;p:ajax event="change" listener="#{bean.methodXpto}"/&gt; 怎么样。在你的 bean 中,public void methodXpto()。检查它是否会被触发。请注意,您不需要将任何参数传递给函数,只需调用它即可。让我知道它是否有效(删除您的 p:selectManyCheckbox 的 ValueChangeListener )

标签: jsf primefaces


【解决方案1】:

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

组件:

<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>

豆子:

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)" 之类的部分往往会提供更好的用户体验。

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 这个答案可以通过展示它在问题上下文中的工作方式或添加解释为什么它是正确的解决方案来变得更有价值。
    猜你喜欢
    • 2013-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多