无法在PrimeFaces DataTable上触发ajax rowSelect事件

use*_*041 3 ajax jsf primefaces

我正在使用PrimeFace DataTable.我想将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">
Run Code Online (Sandbox Code Playgroud)

我在那里有ajax事件:

<p:ajax event="rowSelect" update=":mainForm:displayPost" listener="#{forumManagedBean.rowSelect}" />
Run Code Online (Sandbox Code Playgroud)

在我的支持bean中,我有这个功能:

public void rowSelect(SelectEvent selectEvent)
{
    System.out.println("Hello World");
    ForumPost post = (ForumPost) selectEvent.getObject();
    selectedPost = post;
}
Run Code Online (Sandbox Code Playgroud)

任何人都可以看到我的声明存在问题,导致事件无法触发.我甚至在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    

所以看起来它正在发送rowSelect.但是我的服务器端并没有把它拿起来.

小智 5

你必须添加: selection="#{forumManagedBean.selectedPost}"

在您的setter中,您可以显示所选对象:

public void setSelectedPost(ForumPost post){
            if(post!=null){
                          System.out.println("Hello World"+post);
                           }
             this.selectedPost=selectedPost;
}
Run Code Online (Sandbox Code Playgroud)

那里的ajax事件是这样的:

<p:ajax event="rowSelect" update=":mainForm:displayPost"/>
Run Code Online (Sandbox Code Playgroud)