当前位置: 首页 > 知识库问答 >
问题:

PrimeFaces DataTable中使用单元格编辑器进行行选择会使选择行变得困难

寇升
2023-03-14

我有一个PrimeFaces(3.5)数据表,其中包含一些带有

当我单击包含<代码>

这不会发生,当

在我的例子中,以这种方式选择一行是至关重要的,因为通过右键单击要删除的行,可以使用上下文菜单删除一行,与此showcase示例完全相同(该示例运行良好,因为它没有<代码>

已报告此问题,其状态为“WontFix”。他们说,

不支持同时选择单元格和行。

但是,将框架从3.5降级确实可行(因此,上面的引用应该是错误的,似乎被误解了),但这并不是一个解决方案。是否有人遇到此问题?有没有办法改变这种行为?


共有2个答案

简培
2023-03-14

USE: style="show: block"在您的单元格中:编辑器,为我工作。

<p:cellEditor>
        <f:facet name="output"><h:outputText style="display: block;" value="#{whatever}"/></f:facet>
        <f:facet name="input"><p:inputText id=......../></f:facet>
</p:cellEditor>
鲁成天
2023-03-14

嗯,已经四年了,还没有修好。但是,您可以使用一些JS魔术来实现它。

首先定义JS函数,该函数按索引选择datatable行:

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

并将cell Editor字段包装在定义了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>

如果您使用的是行分组datatable(行索引将被移动),那么这种方法将无法正常工作。

编辑:

如果使用的是行分组数据表,请使用此函数:

function selectByRowKey(rowKey, table) {
    for (var i = 0; i &lt; 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}”)。

 类似资料:
  • 如何用vscode选择多行? 在Visual Studio上,您可以按左alt键并选择多行,但它不适用于vscode。

  • 我有一个问题是通过元素的选择器获取元素。 我纠结的一个页面是:http://html5.haxball.com/。我成功的是登录,但这是一种黑客,因为我使用的事实,我需要填写的字段已经被选中。 在输入nick并进入大堂后,我想点击‘创建房间’按钮。其选择器:body>div>div>div>div>div>div>div.buttons>button:nth-child(3) 运行这样的代码后,我

  • 我正在使用标记为我的搜索框创建一个建议列表,但是我不能从数据列表中选择多个值。当前,我得HTML是:

  • 问题内容: 假设您有一个类似的表(使用SQL Server 2008,没有审核日志-表很大): 假设此表非常庞大(数百万行用于不同的secID和Date)-价格更改后,我想返回记录(寻找比使用游标和迭代更好的东西): 我正在尝试弄清楚如何获得: 即另一种查看方式是我正在寻找价格保持不变的日期范围。 问题答案: 这是一个“孤岛”问题。

  • Video tutorial: Select part of an imageVideo tutorial: Select part of an imageTrain Simple 选框工具允许您选择矩形、椭圆形和宽度为 1 个像素的行和列。 选择选框工具: 矩形选框 建立一个矩形选区(配合使用 Shift 键可建立方形选区)。 椭圆选框 建立一个椭圆形选区(配合使用 Shift 键可建立圆形选区

  • 问题内容: 我想用AngularJS提取一个文件: HTML: javascript: 如何在AngularJS 函数上绑定输入文件操作?我该如何处理之后上传的文件? 问题答案: Angular尚不支持 input [type = file]的* ng-change ,因此您必须自己滚动onchange的实现。 * 首先,在HTML中,为onchange定义Javascript,如下所示: 然后在