如何获取所选单元格

时间:2013-03-06 17:31:39

标签: java ajax jsf primefaces

如果可能的话,我希望获得主要面<p:dataTable

的选定单元格或colomne(id)

我的表就像:

<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}" />选择行(行) 但我无法获得所选的colomn“Date”或“Name

onrowSelecte方法如下:

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

4 个答案:

答案 0 :(得分:2)

卡里姆,

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

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

update上,您需要将表格ID或元素封装在您的表格中。

如果表在outputPanel中,则可以更新它而不是表。

  

发送屏幕信息所需的update属性   到你的backBean。

我希望它好起来......

祝你好运!

答案 1 :(得分:1)

我不认为primefaces有任何选择列的东西,你可能需要添加像

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

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

答案 2 :(得分: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的define属性中获取输入文本值

 String selectedColumn;

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

答案 3 :(得分: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()); }); });

Array selectedRow使用所选DataTable行的<td>文本值填充。