4

我有一個可編輯的數據表(editMode = "cell")。可編輯DataTable中的SelectBooleanCheckbox不變

編輯自由文本字段和列表框非常簡單。但是,我無法弄清楚如何編輯複選框字段。更具體地說,當我嘗試編輯複選框選擇時,輸出構面中的數據在更改後未實現。

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

什麼是有點suprising,當我改變輸入面成的inputText(並在其中輸入真/假值),複選框正確更新:

<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

回答

5

這是一個錯誤,或者至少一個疏忽,在PrimeFaces。

根據涉及的JavaScript代碼(saveCell() function in datatable.js),它只會在將新值提交給服務器之前將輸入的新值與舊值進行比較,如if (input.value != oldvalue)。但是,在複選框(和單選按鈕)的情況下,輸入值永遠不會改變。它總是一樣的。它只是檢查狀態,它應該觸發瀏覽器實際發送狀態到服務器或不。

換句話說,涉及的JavaScript代碼應該檢查它是否是複選框(或單選按鈕),然後通過if (input.checked != oldchecked)進行檢查。

除編輯primefaces.js/datatable.js之外,沒有辦法解決它。你最好給PrimeFaces傢伙report這個問題,並讓他們解決它。

與此同時,您可以通過將值複製到隱藏的輸入字段來解決此問題。

<f:facet name="input"> 
    <h:inputHidden value="#{submodel.mapping}" /> 
    <h:selectBooleanCheckbox value="#{submodel.mapping}" onclick="$(this).prev().val(this.checked)" /> 
</f:facet> 
+3

正是這裏:https://github.com/primefaces/primefaces/blob/b2c095571eb81ac9ff6dd3180630e7f6c4fad115/src/main/resources/META-INF/resources/primefaces/datatable/datatable.js#L1717 –

+0

@Hatem:是的,有:) – BalusC

+0

@BalusC:非常感謝,我在PrimeFaces問題跟蹤器上報告了這個問題(我也檢查了最新的PF 4.0.24版本,但他們還沒有修復它) – gawi