jsf2 f:数据表中的ajax渲染问题

时间:2012-12-10 08:24:44

标签: ajax jsf-2

我有一个数据表,每行都有一个删除链接命令,如下所示:

<h:dataTable value='#{glbProjectDtoList}' var='projectDto'
    binding='#{projectController.projectDataTable}' styleClass='display'
    id='tblProject' rowClasses='gradeA, gradeA'
    columnClasses='projectTableName, projectTableProgress, projectTableAction'>
    ......
    <h:commandLink
        action="#{projectController.delete(projectDto.projectId)}">
        <img class="btnDeleteProject mr5"
            src="#{request.contextPath}/resources/images/icons/dark/trash.png" />
        <f:ajax execute="@form"
            onevent="function(data) {deleteProjectEventHandler(data);}"
            render=":tblProject" />
    </h:commandLink>
    ......
</h:dataTable>

删除功能工作正常,但整个数据表没有重新编译,是因为嵌套在数据表中的操作还是其他原因?


更新:

它不起作用,在删除(:)之后,抛出以下异常:

    javax.faces.FacesException: <f:ajax> contains an unknown id 'tblProject' - cannot locate it in the context of the component j_idt68

表示没有(:),该元素必须位于相同的h:form标记中。


提前致谢。

-COW

3 个答案:

答案 0 :(得分:0)

删除ID前面的:

<f:ajax execute="@form" onevent="function(data) {deleteProjectEventHandler(data);}" render="tblProject"/>

如果id以分隔符开头(通常为:),则从根组件搜索组件,否则从下一个NamingContainer搜索。

有关更多信息,请查看javadoc:UIComponent.findComponent

答案 1 :(得分:0)

这可能发生,因为组件状态刷新时,在视图中找不到数据表的id。

  

要找出该组件所在的确切ID   viewroot,请检查页面源并找出ID   这个数据表被渲染。

您需要使用与viewSource中相同的ID,以便在状态发生变化时允许组件在viewRoot中可见。

或者,UIComponent.findComponent也会提供帮助,如果您指定的ID是正确的,它将返回UIComponent实例,否则它将返回null。

答案 2 :(得分:0)

我已经采用了另一种方法,在表格之外使用隐藏形式。它有效。

谢谢大家;)