Tin*_*iny 6 jsf primefaces jsf-2
我有一个 PrimeFaces (3.5) DataTable,它包含一些列,<p:cellEditor>像往常一样,其中多行的选择由selectionMode="multiple".
当我单击包含 <p:cellEditor>的行中的一个单元格时,该行仅不时被选中。仅当单击靠近单元格边框的填充区域时,才能选择行。当单击中间该单元格的实际文本(实际上由 包围)时,不会进行选择<p:cellEditor>。
这不会发生,何时<p:cellEditor>被解雇。
在我的情况下,以这种方式选择一行是必不可少的,因为通过右键单击要删除的行,使用上下文菜单删除一行,与此展示示例完全相同(该示例工作正常,因为它没有有<p:cellEditor>。我没有找到同时使用行选择和单元格编辑器的展示示例)。
此问题已报告,其状态为“WontFix”。他们说,
不支持同时选择单元格和行。
但是将框架从 3.5 降级确实有效(因此,上面的引用应该只是错误的并且似乎被误解了)但这不是解决方案。有人遇到过这个问题吗?有没有办法改变这种行为?
嗯,已经4年了,还没修好。但是 - 你可以使用一些 JS 魔法来让它工作。
首先定义按索引选择数据表行的JS函数:
<script>
function selectCurrentRow(index) {
var table = PF('myTableWidgetVar');
table.unselectAllRows();
table.selectRow(index, false);
}
</script>
Run Code Online (Sandbox Code Playgroud)
然后使用 rowIndexVar 属性集定义数据表:
<p:dataTable id="myTable" widgetVar="myTableWidgetVar" var="parameter"
value="#{serviceMB.parameters}"
rowIndexVar="rowIndex"
rowKey="#{parameter.id}"
selectionMode="single"
editMode="cell">
Run Code Online (Sandbox Code Playgroud)
并将 cellEditor 字段包装在定义了 onclick 函数的 div 中:
<p:column>
<p:cellEditor>
<f:facet name="output">
<div onclick="selectCurrentRow(#{rowIndex});">
<p:outputLabel value="#{parameter.value}"/>
</div>
</f:facet>
<f:facet name="input">
<div onclick="selectCurrentRow(#{rowIndex});">
<p:inputText value="#{parameter.value}"/>
</div>
</f:facet>
</p:cellEditor>
</p:column>
Run Code Online (Sandbox Code Playgroud)
如果您使用行分组数据表(行索引将被移动),则此技巧将无法正常工作。
编辑:
如果您使用行分组数据表,请使用此函数:
function selectByRowKey(rowKey, table) {
for (var i = 0; i < table.rows.length; i++) {
var row = table.rows.get(i);
if (row.getAttribute("data-rk") === rowKey) {
table.unselectAllRows();
table.selectRow(i, false);
break;
}
}
}
Run Code Online (Sandbox Code Playgroud)
其中 table = PF('myTableWidgetVar') 且 rowKey 是当前选定的 rowKey(例如 '#{parameter.id}')。
| 归档时间: |
|
| 查看次数: |
4225 次 |
| 最近记录: |