8

編集可能な dataTable があります ( editMode = "cell")。

フリー テキスト フィールドとリスト ボックスの編集は非常に簡単です。ただし、チェックボックスフィールドを編集する方法がわかりません。具体的には、チェックボックスの選択を編集しようとすると、変更後に出力ファセットのデータが実現されません。

<p:dataTable id="submodels" var="submodel" value="#{projectMB.submodels}" 
             editable="true" editMode="cell" widgetVar="cellSubmodels">
  <p:column headerText="Mapping file">
    <p:cellEditor>
      <f:facet name="output">
        <h:selectBooleanCheckbox value="#{submodel.mapping}" onclick="return false;"
           style="width:96%" label="Root model" readonly="true"/>
      </f:facet>
      <f:facet name="input">
        <h:selectBooleanCheckbox value="#{submodel.mapping}" style="width:96%" 
           label="Root model"/>
      </f:facet>
    </p:cellEditor>
  </p:column>
</p:dataTable>

入力ファセットをinputTextに変更すると(そしてそれにtrue/false値を入力すると)、チェックボックスが適切に更新されます。

<p:dataTable id="submodels" var="submodel" value="#{projectMB.submodels}" 
             editable="true" editMode="cell" widgetVar="cellSubmodels">
  <p:column headerText="Mapping file">
    <p:cellEditor>
      <f:facet name="output">
        <h:selectBooleanCheckbox value="#{submodel.mapping}" onclick="return false;"
           style="width:96%" label="Root model" readonly="true"/>
      </f:facet>
      <f:facet name="input">
        <p:inputText value="#{submodel.mapping}" style="width:96%" />
      </f:facet> 
    </p:cellEditor>
  </p:column>
</p:dataTable>

私が間違ったことを指摘できますか?JavaScriptコンソールとJavaサーバー側でエラーは発生しません。

Primefaces バージョン 4.0 を使用しています

4

3 に答える 3

8

これは、PrimeFaces のバグ、または少なくとも見落としです。

関連する JavaScript コード ( のsaveCell()関数datatable.js) によると、新しい値をサーバーに送信する前に、入力の新しい値を古い値と比較するだけif (input.value != oldvalue)です。ただし、チェックボックス (およびラジオ ボタン) の場合、入力値は決して変更されません。いつも同じです。ブラウザが実際に状態をサーバーに送信するかどうかをトリガーするのは、チェックされた状態のみです。

つまり、関連する JavaScript コードは、チェックボックス (またはラジオボタン) であるかどうかをチェックし、if (input.checked != oldchecked)代わりにチェックする必要があります。

primefaces.js/を編集する以外に修正する方法はありませんdatatable.jsこの問題を PrimeFaces 担当者に報告し、修正してもらうのが最善です。

それまでの間、非表示の入力フィールドに値をコピーすることで回避できます。

<f:facet name="input">
    <h:inputHidden value="#{submodel.mapping}" />
    <h:selectBooleanCheckbox value="#{submodel.mapping}" onclick="$(this).prev().val(this.checked)" />
</f:facet>
于 2015-01-09T15:10:11.087 に答える