gaw*_*awi 7 datatable tablecelleditor primefaces jsf-2 selectbooleancheckbox
我有一个可编辑的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>
Run Code Online (Sandbox Code Playgroud)
有点令人惊讶,当我将输入facet更改为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>
Run Code Online (Sandbox Code Playgroud)
你能指出我做错了什么吗?我在javascript控制台和Java服务器端没有错误.
我正在使用Primefaces 4.0版
这是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>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5917 次 |
| 最近记录: |