我有一个数据表,每行都有一个删除链接命令,如下所示:
<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
答案 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)
我已经采用了另一种方法,在表格之外使用隐藏形式。它有效。
谢谢大家;)