0
我的selectManyCheckbox中的值屬性被ajax更新覆蓋。這裏是我的JSF(1.2)h:selectManyCheckbox選擇的值被上一個值覆蓋
<h:selectManyCheckbox
id="SelectManyCheckbox"
valueChangeListener="#{parameter.valueChanged}"
value="#{parameter.selectedValues}">
<a4j:support
event="onclick"
reRender="selectionPanel" />
<f:selectItems
value="#{parameter.values}" />
</h:selectManyCheckbox>
這是Parameter類(簡體):
public class Parameter {
List<String> selectedValues;
SelectItemList values;
public void valueChanged(ValueChangeEvent event) {
// here new values and new selectedValues will be set via
// the setters of the two fields
}
}
的問題是,新的值將被正確地設置並顯示出來,但selectedValues會留下在ajax事件之前的值。我調試了它,我可以看到selectedValues被正確設置,但是在重新生成selectionPanel期間,將設置ajax事件之前的舊selectedValues。
當我觸發事件多次,我可以看到,我的selectedValues總是由前值覆蓋,就像這樣:
- 初始化。 (0)
- Event1 newSelectedValue:(1,2,3,4),實際顯示的selectedValue(0)
- Event2 newSelectedValue:(5,6,7,8),實際顯示的selectedValue(1,2) ,3,4)
- EVENT3 newSelectedValue:(9,10,11,12),實際顯示了selectedValue(5,6,7,8-)
- [...]
這裏的一部分覆蓋選定值的棧跟蹤:
com.my.package.structure.Parameter:setSelectedValues
sun.reflect.NativeMethodAccessorImpl:invoke0
sun.reflect.NativeMethodAccessorImpl:invoke
sun.reflect.DelegatingMethodAccessorImpl:invoke
java.lang.reflect.Method:invoke
javax.el.BeanELResolver:setValue
javax.el.CompositeELResolver:setValue
org.apache.myfaces.el.unified.resolver.FacesCompositeELResolver:setValue
org.apache.el.parser.AstValue:setValue
org.apache.el.ValueExpressionImpl:setValue
com.sun.facelets.el.TagValueExpression:setValue
javax.faces.component.UIInput:updateModel
javax.faces.component.UIInput:processUpdates
使用地圖而不是列表,看看會發生什麼。 –
使用地圖不起作用。我們在jsf 1.2。 h:selectManyCheckbox只支持List或Array。 – user1735824