0

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

<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 标记中。


提前致谢。

-奶牛

4

3 回答 3

0

这可能是因为刷新组件状态时在 viewroot 中找不到数据表的 id。

要找出该组件在 viewroot 上的确切 ID,请检查页面源并找出呈现此数据表的 ID。

您需要使用与在 viewSource 中找到的 ID 相同的 ID,以允许组件在状态更改时在 viewRoot 中可见。

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

于 2012-12-10T11:58:00.337 回答
0

去掉:id前面的:

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

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

查看 javadoc 了解更多信息:UIComponent.findComponent

于 2012-12-10T08:45:45.920 回答
0

我采取了另一种方法,使用表格外的隐藏形式。有用。

感谢大家 ;)

于 2012-12-11T03:25:50.020 回答