如何获取<p:dataTable> Primefaces中选定的单元格?

问题描述 投票:0回答:4
java ajax jsf primefaces primefaces-datatable
4个回答
3
投票

卡里姆,

我认为你忘记在你的ajax事件上添加update

<p:ajax event="rowSelect" listener="#{bean.onRowSelect}" update="table" />

update
上,您需要放置表格 ID 或封装表格的元素。

如果表位于outputPanel内,您可以更新它的id而不是表。

update
属性是发送屏幕信息所必需的 到你的背豆。

希望对您有所帮助...

祝你好运!


1
投票

您可以执行类似的操作来获取特定列的值

<p:dataTable id="firsttable" var="list" value="#{bean.list}" rowKey="#{list}" selectionMode="single" >
     <p:column headerText="Date" >
        <h:outputText  value="#{list.SDate}" />
    </p:column>
    <p:column headerText="Name" >
        <h:outputText value="#{list.IName}" />
    </p:column>
</p:dataTable>

// This is capture the value of selected column
<h:inputText id="selectedId" value="#{bean.selectedColumn}" style="display:none">
       <f:ajax listener="#{bean.onRowSelect}"></f:ajax>
</h:inputText>

此脚本捕获所选行的值并设置 inputHidden

 jQuery.noConflict();
    $(window).load(function () {
         $(document).delegate("#firsttable td", "click", function (event) {
             var columnNumber = jQuery(this).index();//get index of clicked row
         var colval=jQuery(this).find('div span').text()); // get the column value
         $("#selectedId").val(colval); //set value in the inputtext
         $("#selectedId").change(); //this will trigger the ajax listener
       });
    });

并在bean定义属性中获取输入文本值

 String selectedColumn;

 public void onRowSelect(AjaxBehaviorEvent event) {
         String value=getSelectedColumn();
         System.out.println(value);
}

1
投票

我认为 primefaces 没有任何内容可以选择列,您可能需要添加类似的内容

<h:outputText  value="#{list.SDate}" >
<f:ajax event="select" listener="#{bean.setSelectedColumn}"/>
</h:outputText>

使用 event.getComponent() 进一步确定选择哪一列


0
投票

关于 PrimeFaces DataTable、widgetVar、Javascript、jQuery:

我在使用 Primefaces widgetVar 获取 PrimeFaces 3.5 DataTable 的选定行时遇到了麻烦。 我在这里查看了 PF 来源...

https://code.google.com/p/primefaces/source/browse/primefaces/trunk/src/main/resources/META-INF/resources/primefaces/datatable/datatable.js?r=10301

...并且还使用Chrome调试器检查DataTable,但没有找到getSelectedRow方法。 我可能错过了一些有用的东西,但这是我的技巧,它有效。

var selectedRow = Array();
$('#idForm1\\:idDT tr.ui-state-highlight').each(function(i) {
    $(this).children('td').each(function(ii) {
        selectedRow.push($(this).text());
    });
 });

数组 selectedRow 填充了所选数据表行的

<td>
文本值。

© www.soinside.com 2019 - 2024. All rights reserved.