我有一个selectManyCheckbox,其中显示了一个项目列表,当我选择一个项目时,我希望触发我的支持bean上的回调,然后获取所选项目的值,以便使用此值进行一些过滤。我的问题是我无法获得支持bean方法。尝试了几种方法,这是我的代码
<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>
<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>
<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>
public void selectFilter(ValueChangeEvent dege) {
Object[] selFilters = (Object[]) dege.getNewValue();
if (selFilters.length != 0) {
//Do stuff
}
}
options属性是存储可用值的特定对象的ArrayList。当然,这个属性有setter&amp;吸气。 PF版本是5.0
答案 0 :(得分:2)
你的代码中有很多东西与我的代码完全不同,这使我很难确定导致问题的确切原因。相反,我将解释我将如何解决它:
组件:
<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)"
等内容更新实际发生变化的部分,往往会提供更好的用户体验。
答案 1 :(得分:0)
要获取所选项目,请使用h:form标签!