如何将facelet包装在<p:ajax>元素</p:ajax>中

时间:2012-08-09 07:18:51

标签: java jsf jsf-2 primefaces facelets

我在小面孔中有一个<p:dataTable>。 facelet包含在页面中。选择一个表行应该触发对周围页面元素的更新。

当我在表格中包含<p:ajax event="rowSelect" update=":open:separate" />时,一切正常。但是我在多个页面上使用该表,并且不能保证更新元素的常量Id。

我尝试从表中删除<p:ajax>并将包含的表格包装在其中:

<p:ajax event="rowSelect" update=":open:separate">
    <ui:include src="/open/components/submittersTable.xhtml"/>
</p:ajax>

我收到此错误(根本原因删节):

javax.servlet.ServletException: /open/index.xhtml @30,59 <p:ajax> Event:rowSelect is not supported.
    javax.faces.webapp.FacesServlet.service(FacesServlet.java:606)
    org.jboss.weld.servlet.ConversationPropagationFilter.doFilter(ConversationPropagationFilter.java:62)

root cause

javax.faces.view.facelets.TagException: /open/index.xhtml @30,59 <p:ajax> Event:rowSelect is not supported.
    org.primefaces.component.behavior.ajax.AjaxBehaviorHandler.applyAttachedObject(AjaxBehaviorHandler.java:148)
    org.primefaces.component.behavior.ajax.AjaxBehaviorHandler.apply(AjaxBehaviorHandler.java:126)

我对<p:ajax>的可能性有错误的想法吗?我是否必须将其包含在表格中并尝试​​强制周围页面上的ID适合?或者可以用include包裹ajax并且我做错了吗?

谢谢

2 个答案:

答案 0 :(得分:1)

不,因为 event =“rowSelect”,你不能。对 event =“rowSelect”的一些解释意味着“选择了数据表中的一行”。所以你不能在p:dataTable之外使用它。

答案 1 :(得分:0)

我找到了一种不同的方法 - 为facelet设置ui参数肯定比使用facelet为所有视图强制执行ID更好。

可以安全地将<p:ajax>标记留在facelet表中,只需在包含网站上定义一个参数:

<ui:include src="/open/components/submittersTable.xhtml">
    <ui:param name="updateParam" value=":open:content" />
</ui:include>

并更改updated属性以使用此参数:

<p:ajax event="rowSelect" update="#{updateParam}" />