Can';t获取要在PrimeFaces数据表上触发的ajax rowSelect事件

Can';t获取要在PrimeFaces数据表上触发的ajax rowSelect事件,ajax,jsf,primefaces,Ajax,Jsf,Primefaces,我使用的是PrimeFace数据表。我想向其中添加ajax rowSelect事件。但是,单击行时,不会触发事件 我的桌子是这样贴花的: <h:from> .... <h:panelGroup id="forumPanelGroup" layout="block" styleClass="messagesPanel" rendered="#{socialAdvertiserTemplateManagedBean.displayForum}" > &

我使用的是PrimeFace数据表。我想向其中添加ajax rowSelect事件。但是,单击行时,不会触发事件

我的桌子是这样贴花的:

<h:from>
....
<h:panelGroup id="forumPanelGroup" layout="block" styleClass="messagesPanel" rendered="#{socialAdvertiserTemplateManagedBean.displayForum}" >
            <p:dataTable 
                id="forumDataTable"
                resizableColumns="true"
                var="post" 
                value="#{forumManagedBean.posts}" 
                scrollable="true"
                scrollHeight="300"
                paginator="true"
                rows="10"
                rowKey="#{post.id_value}"
                emptyMessage="No posts found for the given criteria"
                widgetVar="forumTable"
                selectionMode="single"
                tableStyle="width:auto" 
                paginatorPosition="top">
是否有人看到我的声明存在问题,导致事件无法触发。我甚至在FireBug中查看了它,并看到它在单击一行后被提交:

javax.faces.ViewState 1786545179464296127:-2498355873814808136 javax.faces.behavior.even... rowSelect javax.faces.partial.ajax true javax.faces.partial.event rowSelect javax.faces.partial.execu... mainForm:forumDataTable javax.faces.partial.rende... mainForm:displayPost javax.faces.source mainForm:forumDataTable mainForm mainForm mainForm:forumDataTable_i... 1 mainForm:forumDataTable_s... 0,0 mainForm:forumDataTable_s... 1 mainForm:j_idt181_active 0 mainForm:j_idt70 mainForm:j_idt72 javax.faces.ViewState 1786545179464296127:-2498355873814808136 javax.faces.behavior.甚至。。。行选择 javax.faces.partial.ajax true javax.faces.partial.event行选择 javax.faces.partial.execu。。。主窗体:forumDataTable javax.faces.partial.rende。。。主要形式:displayPost javax.faces.source主窗体:forumDataTable 主窗体主窗体 主要形式:forumDataTable\u i。。。1. 主窗体:forumDataTable\u s。。。0,0 主窗体:forumDataTable\u s。。。1. 主窗体:j_idt181_活动0 主要表格:j_idt70 主要表格:j_idt72
所以它看起来像是在发送rowSelect。但是我的服务器端没有接收到它。

您必须添加:
selection=“#{forumManagedBean.selectedPost}”

在setter中,可以显示选定对象:

public void setSelectedPost(ForumPost post){
            if(post!=null){
                          System.out.println("Hello World"+post);
                           }
             this.selectedPost=selectedPost;
}
其中的ajax事件如下所示:

<p:ajax event="rowSelect" update=":mainForm:displayPost" listener="#{forumManagedBean.rowSelect}" />
<p:ajax event="rowSelect" update=":mainForm:displayPost"/>

我想你的问题是:

<p:ajax event="rowSelect" update=":mainForm:displayPost" listener="#{forumManagedBean.rowSelect}" />

事件无法触发,因为找不到“mainForm”; 您应该在h:form中添加一个ID:

<h:form id="mainForm">


代替使用
:mainForm:displayPost
使用
update=“@[id$=displayPost]”
这将直接拾取displayPost,无需将其映射到任何对象。

我遇到了类似的问题,因为单元格内元素上的单击事件没有传播到单元格本身。 首先检查控制台中是否有关于更新元素的错误,然后添加选择属性,正如上面的答案中所提到的。
如果所有这些都无济于事,请尝试将onclick=“this.parentElement.click();”添加到tablecell(datatable列)中最上面的子元素中。

我假设您在复制粘贴到此处时在表单上键入了一个错误:

<h:from>

也许范围不对?尝试使用ViewScoped。
<h:from>
selectionMode="single" selection="#{forumManagedBean.selectedPost}"