Ajax事件rowToggle在复合组件内部不起作用

时间:2013-11-01 08:42:15

标签: ajax jsf-2 primefaces

我有dataTable的复合组件,我想在其中添加ajax event =“rowToggle”。我尝试了以下选项:

<cc:interface>
        <cc:attribute name="rows" />
        <cc:attribute name="value"
            type="org.primefaces.model.LazyDataModel" />
        <cc:attribute name="var" />
        <cc:attribute name="id" />
        <cc:attribute name="rowStyle" required="false"/>
        <cc:attribute name="ajaxEvent" required="false" />
    </cc:interface>

    <cc:implementation>
        <p:dataTable value="#{cc.attrs.value}"
            rendered="#{not empty cc.attrs.value}" id="#{cc.attrs.id}"
            paginator="true" rows="25" 
            currentPageReportTemplate="Showing {startRecord}-{endRecord} of {totalRecords}"
            paginatorTemplate="{CurrentPageReport}  {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
            rowsPerPageTemplate="25,50,100" paginatorPosition="bottom"
            lazy="true" rowStyleClass="#{cc.attrs.rowStyle}">
             <p:ajax event="#{cc.attrs.ajaxEvent}" global="false" />
             <c:set target="#{component}" property="var" value="#{cc.attrs.var}"/>
            <cc:insertChildren />
        </p:dataTable>
    </cc:implementation>

从主页面,我打电话:

<t:lazydatatable var="changeSummary"
                        value="#{changeLogInspectorBean.changeLogInsertModel}" rows="25"
                        id="change_overview_insert" ajaxEvent="rowToggle">

失败时出现以下错误消息:

<p:ajax> Event:#{cc.attrs.ajaxEvent} is not supported.

你能说出我在这里做错了吗?

1 个答案:

答案 0 :(得分:0)

对于复合组件中的ajax事件调用,您需要在表中定义正确的事件。

尝试声明属性,如:

<cc:attribute name="rowToggleListener" required="false" />

在数据表中的实际调用如:

<p:ajax event="rowToggle"  listener="#{cc.attrs.rowToggleListener}"/>

对于组件:

<t:lazydatatable var="changeSummary"
                 value="#{changeLogInspectorBean.changeLogInsertModel}" 
                 rows="25" id="change_overview_insert" 
                 ajaxEvent="#{yourBackingBean.onRowToggle}">

支持bean中的Mthod可能如下所示:

public void onRowToggle(RowToggleEvent evt){
    MytoggledRowObject rowObject = ((MytoggledRowObject) event.getData());
}

希望有所帮助:)