3

我正在使用 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">

我在那里有 ajax 事件,如下所示:

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

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

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

任何人都可以看到我的声明存在导致事件无法触发的问题。我什至在 FireBug 中查看了它,并在单击一行后看到它被提交:

javax.faces.ViewState 1786545179464296127:-2498355873814808136
javax.faces.behavior.even...rowSelect
javax.faces.partial.ajax 真
javax.faces.partial.event 行选择
javax.faces.partial.execu ... mainForm:forumDataTable
javax.faces.partial.rende ... mainForm:displayPost
javax.faces.source mainForm:forumDataTable
主窗体主窗体
mainForm:forumDataTable_i... 1
mainForm:forumDataTable_s... 0,0
mainForm:forumDataTable_s... 1
mainForm:j_idt181_active 0
主窗体:j_idt70    
主窗体:j_idt72    

所以看起来它正在发送rowSelect。但是我的服务器端没有接它。

4

5 回答 5

5

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

在您的设置器中,您可以显示所选对象:

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"/>
于 2013-09-17T15:54:17.537 回答
0

我认为你的问题是:

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

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

<h:form id="mainForm">
于 2015-04-28T13:54:56.023 回答
0

代替使用:mainForm:displayPostuseupdate="@[id$=displayPost]"这将直接获取 displayPost 而无需将其映射到任何东西。

于 2015-05-31T22:54:12.380 回答
0

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

于 2016-01-26T10:19:46.657 回答
-1

我假设您只是在此处复制粘贴时在表单上打错了字:

<h:from>

否则,您应该得到该行的错误。在您的表单中添加一个 id,以便您在更新时能够访问它。

除了 selectionMode 之外,向您的 dataTable 添加选择将解决您的问题:

selectionMode="single" selection="#{forumManagedBean.selectedPost}"
于 2016-08-17T11:54:33.277 回答