【发布时间】: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 已经尝试删除提交,但仍然没有
-
<p:ajax event="change" listener="#{bean.methodXpto}"/>怎么样。在你的 bean 中,public void methodXpto()。检查它是否会被触发。请注意,您不需要将任何参数传递给函数,只需调用它即可。让我知道它是否有效(删除您的 p:selectManyCheckbox 的 ValueChangeListener )
标签: jsf primefaces