1

如果可能的话,我想获得primefaces的选定单元格或colomne(id)<p:dataTable

我的桌子是这样的:

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

使用这种方法,我可以使用选择的行(行),<p:ajax event="rowSelect" listener="#{bean.onRowSelect}" /> 但我无法获得选定的列“ Date”或“ Name

onrowSelecte 方法如下:

 public void onRowSelect(SelectEvent event)
        myObject obj = (myObject)event.getObject();
        //.......
 }

我认为 primefaces 没有任何东西可以选择一列,您可能需要添加类似

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

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

4

4 回答 4

2

卡里姆,

我认为您忘记在 ajax 事件上添加更新:

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

update你需要把你的表ID或封装你的表的元素放在上面。

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

update将屏幕信息发送到您的 backBean 所必需的属性。

我希望它可以解决...

祝你好运!

于 2016-09-23T14:23:03.557 回答
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);
}
于 2013-03-07T03:01:06.710 回答
1

I don't think primefaces has anything to select a column , you may need to add something like

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

Use event.getComponent() to further determine which column is selected

于 2013-03-06T17:51:22.540 回答
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 方法。我可能错过了一些有用的东西,但这是我的 hack,它有效。

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

数组 selectedRow 填充<td>了选定 DataTable 行的文本值。

于 2014-07-09T23:42:10.960 回答