【发布时间】:2017-05-27 08:35:32
【问题描述】:
如何解决这个问题: 我想使用 primefaces 的 celledit 功能更改我的 bean 映射的键。 对于编辑 map 的值,它工作得很好。
为了更改密钥,我收到以下错误:
javax.el.PropertyNotWritableException: The class 'java.util.HashMap$Node' does not have a writable property 'key'.
<p:dataTable id="breaktime" var="item" value="#{breakTimeDataActions.map.entrySet().toArray()}"
editable="true" editMode="cell" >
<f:facet name="header">
</f:facet>
<p:ajax event="cellEdit" listener="#{breakTimeDataActions.onCellEdit}"
update=":form:msgs" />
<p:column headerText="#{texts['breaktime.hours']}">
<p:cellEditor>
<f:facet name="output">
<h:outputText value="#{item.key}" />
</f:facet>
<f:facet name="input">
<p:spinner value="#{item.key}" min="0" max="24" converter="javax.faces.Integer" />
</f:facet>
</p:cellEditor>
</p:column>
<p:column headerText="#{texts['breaktime.minute']}">
<p:cellEditor>
<f:facet name="output">
<h:outputText value="#{breakTimeDataActions.map[item.key]}" />
</f:facet>
<f:facet name="input">
<p:spinner value="#{breakTimeDataActions.map[item.key]}" min="0" max="24" converter="javax.faces.Integer" />
</f:facet>
</p:cellEditor>
</p:column>
</p:dataTable>
【问题讨论】:
-
这里真正的问题是你为什么要尝试更改
HashMap节点的密钥?密钥是只读的,这违反了基本合同。
标签: java jsf primefaces