我正在使用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">
我在那里有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 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。但是我的服务器端并没有把它拿起来。
答案 0 :(得分:5)
您必须添加: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"/>
答案 1 :(得分:0)
我认为你的问题是:
<h:form id="mainForm">
事件无法触发,因为无法找到“mainForm”; 你应该在你的h:form:
中添加一个ID{{1}}
答案 2 :(得分:0)
取代使用:mainForm:displayPost
使用update="@[id$=displayPost]"
,这将直接获取displayPost,无需将其映射到任何内容。
答案 3 :(得分:0)
我有类似的问题,因为单元格内元素的点击事件没有传播到单元格本身。 首先,检查控制台中有关于更新元素的任何错误,然后添加选择属性,如上面的答案中所述。 如果所有这些都没有帮助尝试添加onclick =“this.parentElement.click();”到tablecell(datatable列)中的top子元素。
答案 4 :(得分:0)
我假设你刚刚在你的表单上写了一个拼写错误,然后在这里复制:
<h:from>
否则,您应该收到该行的错误。在表单中添加ID,以便在更新时能够访问它。
除了selectionMode之外,向dataTable添加选择将解决您的问题:
selectionMode="single" selection="#{forumManagedBean.selectedPost}"