我的checkBox
页面中的dataTable中有一个JSF
值,它来自bean中的地图。
<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个值,所有这些都是假的。地图本身如下:
public Map<Integer, Boolean> selectedRowIndexesMap = new HashMap<Integer, Boolean>();
当我按下其中一个checkBoxes
时出现问题。它应该根据rowNumber
编辑地图内的值。它的作用是向地图添加全新的元素,它不会对其进行编辑。
例如,如果在点击checkbox
地图之前看起来像这样: 0-false; 1-假; 2-假; 3-假;
点击checkbox
后,它看起来像这样: 0-true; 0假; 1-假; 2-假; 3-假;
为什么会这样?
答案 0 :(得分:2)
因为EL中的数字默认评估为Long
。即#{rowIndex}
实际上是Long
。
Long
0L
值不等于Integer
0
值。证据如下:
Long zeroL = 0L;
Integer zero = 0;
System.out.println(zeroL.equals(zero)); // false
因此,它只是插入一个以0L
为键的新地图条目,而不是替换与0
的键相关联的值。将其更改为Map<Long, Boolean>
并且它可以正常工作。此问题与JSF复选框无关。