当前位置: 首页 > 知识库问答 >
问题:

获取所选primefaces数据表行的行号

姬成荫
2023-03-14

在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>

共有2个答案

晏望
2023-03-14

我对另一个答案中复杂的解决方案感到惊讶。假设您在执行选择时有#{workSpaceBean.lpInfoList}服务器端,您可以轻松地执行(根据PrimeFaces展示的代码,根据您的需要进行调整)

<p:ajax event="rowSelect" listener="#{dtSelectionView.onRowSelect}" update="..." />
public void onRowSelect(SelectEvent event) {
    int rownum = cars.indexOf((Car)event.getObject());

}
袁旻
2023-03-14

我认为没有一种直接的方法可以做到这一点。虽然使用两个ajax请求并不漂亮,但至少可以在使用普通素面时达到预期的效果。如果将p:ajax替换为PrimeFaces扩展pe:javascript,则可以将此调用减少为一个调用,该扩展不会往返到服务器

datatable呈现的每一行(tr)都有一个名为data rk的属性和一个名为data ri的属性,其中包含rowKey和rowIndexVar值。

可以通过dtWidgetVar获取数据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}" />

豆角

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

如果使用复选框选择,则可以如下方式检索所选索引:

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

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

 类似资料:
  • 我在PrimeFaces中创建了一个datatable,它接收并呈现一个对象列表。在这一行的末尾,我有一个commandButton元素,当使用它时,它会在服务器上的managedBean上执行一些操作。 使用参数属性中命令按钮中的对象id检索当前行的所有数据。 问题是我有一个selectOneMenu元素,它与对象无关。我选择一个影响后面逻辑的值。 这是桌子: ...选择 ... 还有命令按钮

  • 我正在使用primeface 3.5,我希望在以下问题上得到帮助: 我有一个选择模式为single的datatable,所选项目是绑定到对象,而不是特定对象属性上的对象。下面的示例代码: 在项目创建期间,我不会立即将项目持久化到数据库,而是维护一个项目列表,并在操作保存处理程序期间持久化整个列表。 问题是,对于每个新创建的项,我都没有生成对象id(在持久化时在数据库上自动完成),并且在表上选择行的

  • 我正在使用Primefaces 3.5数据表。该表已启用多重选择模式。基本上,该表与[本次展示][1]中的最后一个表相同。表的定义如下 因此,当用户通过单击复选框选择一些行,然后意外地单击一行时,除了用户最后单击的那一行之外,所有选中的行都将被取消选中。 问题是:是否有任何解决方法来维护选中的行,即使用户将单击该行的“退出”复选框? 我的一些观察: 如果用户按Ctrl键并单击该行,则所有其他行都将

  • 我有一个类似于上面代码的数据表,如你所见,我使用事件RowSelected复选框,有没有办法知道单击的行,并根据该信息完全禁用该行?

  • 一切工作正常(动作得到调用,UI渲染正确,等等...)。除了当我试图获取所选对象时,我一直得到NullPointerExcema(即使我用setProperty tyActionListener设置它)...我如何实际得到我在orderList上点击的行。我做了一个转换器,但仍然没有带我去哪里。 我使用webflow来处理动作(xml)。

  • 该页显示列表中的正确值。然而,当我尝试选择一个项目。它不起作用。 我能在列表中选择一个项目吗?