Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么JSF复选框将新值输入到映射_Jsf_Checkbox_Hashmap_El - Fatal编程技术网

为什么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。非常感谢。