【问题标题】:how to get the selected cell in <p:dataTable primefaces?如何在 <p:dataTable primefaces 中获取选定的单元格?
【发布时间】:2013-03-06 17:31:39
【问题描述】:

如果可能的话,我想获取primefaces &lt;p:dataTable的选定单元格或列(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>

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

onrowSelecte 方法是这样的:

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

【问题讨论】:

  • 你能告诉我们 bean 中的 onRowSelect 方法吗?
  • @SrinivasR 查看编辑,谢谢

标签: java ajax jsf primefaces


【解决方案1】:

卡里姆,

我认为您忘记在您的 ajax 事件中添加 update

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

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

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

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

我希望它会帮助...

祝你好运!

【讨论】:

  • 谢谢回答!罗洛:)
【解决方案2】:

你可以这样做来获取特定列的值

<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);
}

【讨论】:

  • 脚本不适合我。我在 'jQuery.noConflict();' 中收到此错误:未捕获的类型错误:对象 [object Object] 的属性“$”不是函数 script.js.xhtml:159(匿名函数)
  • 快速解决方案是完美的!谢谢你,朋友。只是为了获取 jsf inputId,我们必须使用 $("#form\\:selectedId") !!!!
  • 是的。$("#form\\:selectedId") 当你有一个 formId 时你必须使用它。但我按照&lt;h:form prependId="false"&gt; 做了以避免混淆
  • 我有问题!!当我单击任何表时,jquery 函数一直被调用。如何只指定一张表?
  • @berber5..是的,在上述脚本事件中发生的原因是delegatedtable td。您可以将id 分配给表格并执行.delegate('#tableid td','click'....)。查看我更新的答案
【解决方案3】:

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

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

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

【讨论】:

  • 这不是我要找的。我想获取选定的列“DATE​​”或“NAME”
【解决方案4】:

关于 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 填充了选定 DataTable 行的 &lt;td&gt; 文本值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-23
    • 1970-01-01
    相关资源
    最近更新 更多