icefaces 2 beta 1: binding selectmanycheckbox to map raises conversion error
if i want to bind the value-attribute of a h:selectmanycheckbox
to a map, with the ri of the jsf 2.0.3 i would do something like the following
the bean:
private Map<String, String[]> values = new HashMap<String, String[]>();
public Map<String, String[]> getValues() {
return values;
}
public void setValues(Map<String, String[]> values) {
this.values = values;
}
and the xhtml page:
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">
&l开发者_StackOverflow社区t;h:head>
<title>Facelet Title</title>
</h:head>
<h:body>
<h:form>
<h:selectManyCheckbox
id="test"
value="#{testController.values['foo']}">
<f:selectItem itemLabel="1" itemValue="1_1" />
<f:selectItem itemLabel="2" itemValue="1_2" />
<f:selectItem itemLabel="3" itemValue="1_3" />
<f:selectItem itemLabel="4" itemValue="1_4" />
</h:selectManyCheckbox>
<h:commandButton value="Send" />
</h:form>
</h:body>
This works fine, but in my application I need more control over the location of every single checkbox, so i replaced the standard <h:selectManyCheckbox>
tags with their icefaces-equivalent <ice:selectManyCheckbox>
and the <ice:checkbox>
.
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ice="http://www.icesoft.com/icefaces/component"
xmlns:f="http://java.sun.com/jsf/core">
<h:head>
<title>Facelet Title</title>
</h:head>
<h:body>
<h:form>
<ice:selectManyCheckbox
id="test"
layout="spread"
value="#{testController.values['foo']}">
<f:selectItem itemLabel="1" itemValue="1_1" />
<f:selectItem itemLabel="2" itemValue="1_2" />
<f:selectItem itemLabel="3" itemValue="1_3" />
<f:selectItem itemLabel="4" itemValue="1_4" />
</ice:selectManyCheckbox>
<table border="1">
<tr>
<td><ice:checkbox id="c1" for="test" index="0" /></td>
<td><ice:checkbox id="c2" for="test" index="1" /></td>
</tr>
<tr>
<td><ice:checkbox id="c3" for="test" index="2" /></td>
<td><ice:checkbox id="c4" for="test" index="3" /></td>
</tr>
</table>
<h:commandButton value="Senden" />
</h:form>
</h:body>
Now whenever I send the form I get a conversion-error and I can't figure out why.
If I bind the <ice:selectManyCheckbox>
's value-attribute to a simple stringarray it forks fine, but because I don't know how many checkbox-groups there will be I need it to work with a map.
I use the icefaces 2.0.0 beta 1 together with the sun ri 2.0.3 and the el 2.2 on tomcat 6.0.26.
Does anybody know a solution to my problem?
A while ago Ifaced the exact same problem, and I realized that it is a weird behavior when you set as a value a Map in the selectManyCheckbox
, so what I did was instead of use a Map<Integer,List<SomeValues>>
it was Map<Integer,SomeValuesContainer>
and inside that class I set List<SomeValues>
as a property:
class SomeValuesContainer implement Serializable{
List<SomeValues> someValuesList;
SomeValues getSomeValueList(){
return someValuesList;
}
void setSomeValuesList(List<SomeValues> someValueList){
this.someValuesList = someValuesList;
}
}
So I can get access from the view like this:
<ice:selectManyCheckbox
id="test"
layout="spread"
value="#{testController.values['foo'].someValuesList}">
That happens because the selectManyCheckbox
value needs to see value as a property, not a function.
You can try to put as many dummy mapelemts as you need to "initialize" your map.
Did you try to implement a converter?
精彩评论