javascript - 在 dataTable rowSelect 上调用 History.pushState

标签 javascript jsf primefaces datatable pushstate

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

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

关于javascript - 在 dataTable rowSelect 上调用 History.pushState,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28813078/

相关文章:

javascript - 为什么 ckeditor 不支持 <> 之间的 dropvalue?

javascript - FF 在 document.write() 之后一直旋转

javascript - 理解柯里化(Currying)函数

java - 如何动态编辑 HTML 文件的内容

java - 在数据表过滤器上添加 onkeyup 事件

javascript - Spring Social - 如何重定向到原始 URL 或通过 Popup/Iframe 重新加载进行身份验证

jsf - 将 ValueExpression 属性的原始表达式访问到 taglib 组件

jsf - '丰富的 :component' not found: a4j:ajax with a composite component

debugging - JSF <用户界面 :debug> not showing CDI beans

java - Primefaces 数据表中的日期显示不正确