我正在使用PrimeFaces 5.1,当用户使用以下代码单击history.pushState行时,我会调用p:dataTable

<p:dataTable value="#{associateBean.scenarios}"
        selectionMode="single"
        selection="#{associateBean.selectedScenarioViewBean}"
        var="scenarioViewBean" rowKey="#{scenarioViewBean.id}">
    <p:ajax event="rowSelect"
        listener="#{associateBean.onScenarioRowSelect}"
        oncomplete="history.pushState('','','test#{scenarioViewBean.id}')"
        update="@form"/>
    <p:column>
        <h:outputText value="#{scenarioViewBean.name}"/>
    </p:column>
</p:dataTable>


如您所见,我正在尝试将scenarioViewBean.id值传递给我的pushState调用。

问题在于#{scenarioViewBean.id}不返回任何内容,因此JavaScript在URL中推送了“ test”而不是“ test123”。

我怎么解决这个问题?

最佳答案

无需使事情复杂化,保留rowSelect ajax事件并按以下方式传递ID:

PF('dataTableWV').selection[0]


根据您的问题,最终结果应如下所示:

<p:ajax event="rowSelect"
    listener="#{associateBean.onScenarioRowSelect}"
    oncomplete="history.pushState('','','test'+PF('dataTableWV').selection[0]"
    update="@form"/>


注意:dataTableWV是dataTable小部件

10-06 02:36