JSF h:datatable + f:ajax(requestscoped,Backing Component)

时间:2017-12-12 02:16:50

标签: ajax jsf jsf-2 datatable commandlink

我必须创建一个数据表组件(作为支持组件)。 分页(<h:commandLink>之外的<h:dataTable>)和排序(<h:commandLink>中的<f:facet name="header">)运行正常。但现在我想为每一行添加一个删除功能。我的faclet(<cc:implementation>)中的部分代码如下所示:

<h:form id="form">
    <h:dataTable id="table" value="#{cc.paginationPage.listings}" var="user">
        <h:column>                  
            <f:facet name="header">Delete</f:facet>                 
            <h:commandLink id="btn">
                <span>X</span>
                <f:param value="#{cc.paginationPage.sortedColumn}" name="sorting_column"/>
                <f:param value="#{cc.paginationPage.sortedColumnDirection}" name="sorting_direction"/>
                <f:param value="#{cc.paginationPage.currentPage}" name="pagination_page"/>
                <f:param value="#{user.id}" name="user_id"/>
                <f:ajax execute="@form" event="click" render="@form" listener="#{cc.delete}" />
            </h:commandLink>
        </h:column>
   </h:dataTable>
</h:form>

cc.delete是我的bean(FacesComponent)中的一个函数,看起来像这样:

public void delete(AjaxBehaviorEvent event) {
    System.out.println("delete!");
}

问题是listener中的<f:ajax>会被忽略。 ajax只调用bean中的init函数(使用<f:event listener="#{cc.init}" type="preRenderView"></f:event>设置)。没有错误或异常。即使我试着打电话给listener="#{cc.doesentExist}"

我相信我的问题出现在BalusC's list的第4点(与评论中的kavain问题相同)。 但我不知道如何解决它,因为我不能将我的bean改为ViewScoped。那么,我怎样才能让<h:commandLink>在这种情况下工作?有人可以帮帮我吗?

PS: 不幸的是,我只能使用普通的JSF(2.3)(没有像primefaces等框架允许)。

谢谢!

0 个答案:

没有答案