hr6134
hr6134

Reputation: 165

JSF selectOneMenu set null to map[key]

I want to get/set selectOneMenu value from/to map, so, I use next code 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>

Bean:

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());
}

but, when I execute and, then, rerender it, value change to previous. In details: suppose productKeys have just key 0 and productLists[0] contains several strings ("apple", "orange", "banana"). At current time we select "orange", then we try to choose "all". After rerender I see "orange" again and tmp[0] contain "orange" too. If I change it to "apple", everything will be ok. My question: how can I set null to tmp[key]?

Upvotes: 0

Views: 1272

Answers (1)

Dipul Patel
Dipul Patel

Reputation: 187

you can not assign null value to SelectItem. if you assign it from backingbean it will raise rendering issue. but you can do it by

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

so whenever you select 'All' option, it will return -1.

Upvotes: 1

Related Questions