为什么JSF checkBox输入新值来映射

时间:2015-10-02 10:32:44

标签: jsf checkbox hashmap el

我的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-假;

为什么会这样?

1 个答案:

答案 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复选框无关。