获取所选主要数据表行的行号

rks*_*rks 8 datatable primefaces jsf-2

我有一个primefaces数据表,我需要在JSF页面中显示(选择行数)(总行数).我可以使用rowIndexVar属性在其中一列中显示行号,但我不知道要显示在行选择的输入文本中分别使用相同的数字.

我应该在JSF页面或托管bean中做什么来获取选定的行号.

请帮助我这方面.

下面是我的JSF页面

<p:dataTable id="workSpaceList" var="data"
            value="#{workSpaceBean.lpInfoList}" widgetVar="multiSelection"
            selection="#{workSpaceBean.selectedRows}" resizableColumns="true"
            liveScroll="true" scrollRows="55" scrollWidth="85%"
            scrollHeight="81%" styleClass="datatable" 
            scrollable="true" rowIndexVar="rowIndex"
            filteredValue="#{workSpaceBean.filteredWorkSpaceItems}">

            <p:column selectionMode="multiple" style="width:3%" />
            <p:column headerText="#" style="width:3%">
                #{rowIndex+1}
            </p:column>
            <p:column headerText="Insured" filterBy="#{data.insuredName}"
                sortBy="#{data.insuredName}" style="width:24%">
                <h:outputText value="#{data.insuredName}" />
                <!--   style="width:250px" -->
            </p:column>

            <p:column headerText="City" filterBy="#{data.custAddress_City}"
                sortBy="#{data.custAddress_City}" style="width:12%">
                <h:outputText value="#{data.custAddress_City}" />
            </p:column>
            .
            .
            .
            .

        </p:dataTable>
Run Code Online (Sandbox Code Playgroud)

Dan*_*rgo 19

我相信没有直接的方法可以做到这一点.虽然使用两个ajax请求并不漂亮,但至少可以达到使用普通PrimeFaces时所期望的结果.如果p:ajax将PrimeFaces扩展替换为pe:javascript不向服务器进行往返的PrimeFaces扩展,则可以将此减少为一个调用

数据表呈现的每一行(tr)都有一个名为data-rk的属性,其中包含rowKey,另一个属性名为data-ri,带有rowIndexVar值.

您可以通过dtWidgetVar.selection获取data-rk属性(dtWidgetVar是数据表中 widgetVar的名称).

您现在可以使用remoteCommand将indexRow发送到您的模型

这是我用来测试它的代码:

风景

<p:remoteCommand name="displayIndex" process="@this" update="index" actionListener="#{viewMBean.displayRowIndex}"/>

<p:dataTable id="dt" var="data"
             value="#{viewMBean.dataModel}" 
             selection="#{viewMBean.selectedRow}"
             selectionMode="single"
             widgetVar="dtVar"
             rowIndexVar="index">
    <p:ajax event="rowSelect" 
            oncomplete="displayIndex([{name:'index', value:jQuery('tr[data-rk=' + dtVar.selection + ']').attr('data-ri')}])" process="@this" />
    <p:column headerText="#">
        #{index + 1}
    </p:column>
    <p:column headerText="Dados">
        #{data.name}
    </p:column>
</p:dataTable>
<br />
Row Index: <p:inputText id="index" value="#{viewMBean.index}" />
Run Code Online (Sandbox Code Playgroud)

管理Bean

public void displayRowIndex() {
    FacesContext context = FacesContext.getCurrentInstance();
    Map map = context.getExternalContext().getRequestParameterMap();
    String pIndex = (String) map.get("index");
    index = Integer.parseInt(pIndex);
}
Run Code Online (Sandbox Code Playgroud)

如果您使用复选框选择,您可以检索所选的索引,如下所示:

function beforeDisplayingIndexes(){
    var indexes = "";
    jQuery("tbody .ui-chkbox-box").each(function(){
      if (jQuery(this).hasClass("ui-state-active")){
        indexes = indexes + (indexes === "" ? "" : ",") + jQuery(this).closest("tr").attr("data-ri");
      }
    });
    //for debuging only
    console.log(indexes);
    displayIndex([{name:'index', value:indexes}])
}
Run Code Online (Sandbox Code Playgroud)

您现在应该能够对代码进行适当的修改以利用它.