VCy*_*y_A 6 java el hashmap primefaces jsf-2
我有一个<p:dataTable>每行都有一个像这样的 inputText :
<p:dataTable ... rowIndexVar="row">
<p:column>
<p:inputText value="#{myBean.items[row + 1]}" />
</p:column>
</p:dataTable>
Run Code Online (Sandbox Code Playgroud)
该items属性是Map<Long, String>:
private Map<Long, String> items = new HashMap<Long, String>();
Run Code Online (Sandbox Code Playgroud)
当我提交一些数据并手动遍历地图时,它显然有效:
Iterator itr = items.entrySet().iterator();
while (itr.hasNext()) {
Map.Entry e = (Map.Entry) itr.next();
System.out.println("key: " + e.getKey() + " " + "value: " + e.getValue());
}
Run Code Online (Sandbox Code Playgroud)
我得到:
键:1 值:item1 键:2 值:item2 键:3 值:item3 键:4 值:item4
但是,当我尝试通过键获取特定项目时
String item = items.get(1);
Run Code Online (Sandbox Code Playgroud)
然后我得到一个null. 根据地图的内容,我应该得到item1. 这是怎么引起的,我该如何解决?
在1你指定在items.get(1)被指定为int和autoboxed来Integer。这不是equals()的Long值,1因此永远找不到密钥。
Integer int1 = new Integer(1);
Long long1 = new Long(1L);
System.out.println(int1.equals(long1)); // false
Run Code Online (Sandbox Code Playgroud)
您需要指定1asLong而不是(隐式) as Integer。
String item = items.get(1L);
Run Code Online (Sandbox Code Playgroud)
如果您想知道为什么这里没有出现编译错误,那是因为这里提到的原因Map#get()需要一个Object而不是K:什么是 Map.get(Object key) 不是(完全)通用的原因。