0

我想从/到地图获取/设置 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]?

4

1 回答 1

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。

于 2013-07-01T14:08:31.710 回答