2017-05-27 28 views
0

この問題を解決するには 私のbeanマップのキーをprimefacesからcelledit機能で変更したいと思います。 mapの値を編集するにはうまくいきます。あなたがエラーを取得する理由はのentrySetのキーは不変であるということです

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> 
+2

本当の質問は、なぜあなたは 'HashMap'ノードのキーを変更しようとしているのですか?基本的な契約の違反は、鍵が読み取り専用であることです。 – EJP

答えて

1

:私は次のエラーを取得するキーを変更するための

entrySet()メソッドはSet<Map.Entry>を返します。あなたがMap.Entryためjavadocsを見れば、あなたが表示されます。

  • V getValue()方法、
  • void setValue(V)方法、
  • K getKey()方法が、
  • なしvoid setKey(K)方法

基本的にkeyプロパティは、JavaBeansの規約ごとに読み取り専用です。 keyをに変更すると、新しいkeyが元のマップの別のエントリのkeyと同じであった場合、どうするのが難しい問題になるからです。実際には良いことです。

+0

ありがとう、ありがとうございます。私の考えはキーを上書きすることでした。時間 - >分のキー値を表示したいと思います。私は地図が良い解決策だと思った。私のJPAモデルでは、このためのマップがあります。私はjsfとBeanでこれを表現する方法を知らない。 –

+0

あなたが表現していることが時間単位のマッピングであることは確かですか?あなたの説明から、それは時/分の組のセットのように聞こえる。 –

+0

私もこれについて話します。時間と分のプロパティを持つ独自のクラスを作成することを意味しますか?例のセットの間隔 –

関連する問題