嗯,已经4年了,还没有修复。但是 - 你可以使用一些 JS 魔法来让它工作。
首先定义按索引选择数据表行的JS函数:
<script>
function selectCurrentRow(index) {
var table = PF('myTableWidgetVar');
table.unselectAllRows();
table.selectRow(index, false);
}
</script>
然后使用 rowIndexVar 属性集定义您的数据表:
<p:dataTable id="myTable" widgetVar="myTableWidgetVar" var="parameter"
value="#{serviceMB.parameters}"
rowIndexVar="rowIndex"
rowKey="#{parameter.id}"
selectionMode="single"
editMode="cell">
并在定义了 onclick 函数的 div 中包装 cellEditor 字段:
<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>
如果您使用行分组数据表(行索引将被移动),此 hack 将无法正常工作。
编辑:
如果您使用行分组数据表,请使用此函数:
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;
}
}
}
其中 table = PF('myTableWidgetVar') 和 rowKey 是当前选择的 rowKey(例如 '#{parameter.id}')。