【问题标题】:jsf2 f:ajax render issue in datatablejsf2 f:ajax 渲染数据表中的问题
【发布时间】:2012-12-10 08:24:44
【问题描述】:

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

<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>

delete功能正常,但是整个数据表没有重新渲染,是因为动作嵌套在数据表中还是其他原因?


更新:

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

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

表示没有(:),该元素必须在同一个h:form标签中。


提前致谢。

-牛

【问题讨论】:

  • 尝试使用render="tblProject"render="@form" 而不是render=":tblProject"
  • render="tblProject" throw exception with unknown id 'tblProject', render="@form" 没有意义,因为数据表不在表单中。
  • 表格的完整 ID 是多少(在浏览器中查看源代码)?
  • 你的桌子最终被包裹在一些 h:form 中,对吧?
  • 不是,我有以下结构。
    .button.
    button
    button...
    ,第一个h:form中的button可以用render=":tblProject"渲染datatable,但是datatable里面的button不能。 :(

标签: ajax jsf-2


【解决方案1】:

去掉id前面的:

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

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

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

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

    • ID正好是'tblProject',但是说找不到。
    【解决方案3】:

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

    谢谢大家;)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-26
      • 2011-12-18
      • 2011-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-24
      • 1970-01-01
      相关资源
      最近更新 更多