为什么JSF复选框将新值输入到映射
在我的为什么JSF复选框将新值输入到映射,jsf,checkbox,hashmap,el,Jsf,Checkbox,Hashmap,El,在我的JSF页面的dataTable中,我有一个复选框,它从bean中的map中获取值 <h:selectBooleanCheckbox id="rowChecked" value="#{messagesListBean.selectedRowIndexesMap[rowIndex]}"> <a4j:ajax event="click" execute="@this" render="@none" limitRender="tru
JSF
页面的dataTable中,我有一个复选框,它从bean中的map中获取值
<h:selectBooleanCheckbox id="rowChecked"
value="#{messagesListBean.selectedRowIndexesMap[rowIndex]}">
<a4j:ajax event="click" execute="@this" render="@none"
limitRender="true"
listener="#{messagesListBean.rowChecked(rowIndex, rec)}">
</a4j:ajax>
</h:selectBooleanCheckbox>
<h:outputLabel for="rowChecked" class="checkbox-style" />
Map在页面加载时初始化,并且初始化得很好-有4个值,所有值都为false。地图本身如下所示:
public Map<Integer, Boolean> selectedRowIndexesMap = new HashMap<Integer, Boolean>();
publicmap selectedRowIndexesMap=newhashmap();
问题是当我按下其中一个复选框时。它应该根据行数
编辑地图内的值。它所做的是向地图添加全新的元素,而不是编辑它
例如,如果在单击复选框之前
映射如下所示:0-false;1-假;2-假;3-假
单击复选框后,它看起来是这样的:0-true;0-false;1-假;2-假;3-假
为什么会发生这种情况?因为EL中的数字默认值为长
。也就是说,{rowIndex}
实际上是长的
Long
值0L
不等于整数值0
。证据如下:
Long zeroL = 0L;
Integer zero = 0;
System.out.println(zeroL.equals(zero)); // false
因此,它只需插入一个带有0L
键的新地图条目,而不是替换与0
键关联的值。将其更改为地图
,它就会工作。这个问题与JSF复选框无关。你应该得到一个cookie。非常感谢。