我想从/到map获取/设置selectOneMenu值,所以,我使用下一个代码xhtml:
<h:panelGroup id="productFilters">
<ui:repeat id="repeatSelectOneMenu"
value="#{filterBean.productKeys}"
var="key">
<h:selectOneMenu id="productFiltersSelector"
value="#{filterBean.tmp[key]}"
onchange="executeProductSelector();">
<f:selectItem value="#{null}" itemLabel="#{commonBundle.all}"/>
<f:selectItems value="#{filterBean.productLists[key]}"/>
</h:selectOneMenu>
</ui:repeat>
<a4j:jsFunction name="executeProductSelector"
render="productFilters"
limitRender="true"
execute="productFilters"/>
</h:panelGroup>
豆:
public Map<Integer, String> getTmp() {
return tmp;
}
public void setTmp(Map<Integer, String> tmp) {
this.tmp = tmp;
}
public Map<Integer, List<String>> getProductLists() {
return productLists;
}
public void setProductLists(Map<Integer, List<String>> productLists) {
this.productLists = productLists;
}
public List<Integer> getProductKeys() {
return new ArrayList<>(getProductLists().keySet());
}
但是,当我执行时,然后重新渲染它,将值更改为之前的值。 详细说明:假设productKeys只有键0,而productLists [0]包含几个字符串(“apple”,“orange”,“banana”)。目前我们选择“橙色”,然后我们尝试选择“全部”。在重新渲染后,我再次看到“橙色”,而tmp [0]也包含“橙色”。如果我把它改成“苹果”,一切都会好的。 我的问题:如何将null设置为tmp [key]?
答案 0 :(得分:1)
您无法为SelectItem指定空值。如果你从backingbean分配它,它将引发渲染问题。但你可以通过
来做到这一点<h:selectOneMenu id="productFiltersSelector"
value="#{filterBean.tmp[key]}"
onchange="executeProductSelector();">
<f:selectItem value="-1" itemLabel="#{commonBundle.all}"/>
<f:selectItems value="#{filterBean.productLists[key]}"/>
</h:selectOneMenu>
因此,每当您选择“全部”选项时,它将返回-1。