当前位置: 首页 > 面试题库 >

如何在dataTable中引用dataTable父级?

葛念
2023-03-14
问题内容

考虑一个虚拟情况:

<h:form id="wrapperForm">
    <h:panelGroup id="rowsContainer">
        <h:dataTable id="rowsTable" value="#{bean.rows}" var="row" >
            <h:column>
                <h:commandButton value="Click me to update (#{component.parent.parent.parent.clientId})">
                    <f:ajax render=":#{component.parent.parent.parent.clientId}" />
                </h:commandButton>
            </h:column>
        </h:dataTable>
    </h:panelGroup>
</h:form>

单击按钮后,id=rowsContainer获取的内容将成功更新。

但是,如果我在ui:repeat此处添加,它将不再起作用:

<h:form id="wrapperForm">
    <ui:repeat id="blocksRepeat" var="block" value="#{bean.blocks}">
        <h:panelGroup id="rowsWrapper">
            <h:dataTable id="rowsTable" value="#{block.rows}" var="row" >
                <h:column>
                    <h:commandButton value="Click me 2 update (#{component.parent.parent.parent.clientId})">
                        <f:ajax render=":#{component.parent.parent.parent.clientId}" />
                    </h:commandButton>
                </h:column>
            </h:dataTable>
        </h:panelGroup>
    </ui:repeat>
</h:form>

相反,它得到:

<f:ajax> contains an unknown id ':wrapperForm:blocksRepeat:0:rowsWrapper' - cannot locate it in the context of the component j_idt363

但是,该html" target="_blank">组件确实具有该ID,因此EL应该没问题。不知何故ui:repeat打破了案件。是否有可能在实际循环之前尝试评估EL?

您如何rowsWrapper从dataTable中引用元素?

注意:我最近询问了ui:repeat中奇怪的dataTable命名问题,事实证明这是一个bug。这个问题不应该然而,因为我是一个panelGroup中内包装DataTable中的建议涉及到的是。


问题答案:

实际上有两件事出了问题:

1)ui:repeat坏了

正如BalusC在问题评论中所回答的那样,由于Mojarra中的错误,第一个问题(再次出现)发生了。ui:repeat甚至包装h:dataTable没有帮助的包装容器似乎也是如此损坏。

正如BalusC所建议的,一种解决方法是使用h:dataTable而不是ui:repeat。它将提供不方便的(<table>)HTML,但可以使用。当向内部迭代中添加行或从内部迭代中删除行时,这消除了一些奇怪的问题。

注意:关于ui:repeatMojarra 2.0.3的某些问题似乎已解决,但并非全部。

2)引用只是失败

即使有h:dataTable解决方法,h:dataTable也无法从内部按钮对内部的引用。由于没有ui:repeat使用,这必须是数据表的内部问题。目前没有任何解决方案,因此我也针对这种行为提交了罚单。



 类似资料:
  • JSF为开发人员提供了强大的功能来定义他们自己的自定义组件,可用于呈现自定义内容。 定义自定义组件 在JSF中定义自定义组件的过程分为两步。 步 描述 1a 创建资源文件夹。 使用复合命名空间在resources文件夹中创建xhtml文件。 1b 使用复合标签composite:interface, composite:attribute和composite:implementation,来定义复

  • JSF提供了一个名为DataTable的丰富控件来呈现和格式化html表。 DataTable可以迭代一个集合或值数组来显示数据。 DataTable提供了以简单方式修改其数据的属性。 HTML标头 <html xmlns = "http://www.w3.org/1999/xhtml" xmlns:h = "http://java.sun.com/jsf/html"> </h

  • h:dataTable标签用于以表格方式显示数据。 JSF标签 (JSF Tag) <h:dataTable value = "#{userData.employees}" var = "employee" styleClass = "employeeTable" headerClass = "employeeTableHeader" rowClasses = "employee

  • 问题内容: 我目前正在尝试从用C#编写的WPF应用程序中的数据库中检索记录。我正在使用SQL数据读取器,它似乎可以正常连接,但以下内容给了我NullReferenceException: 同样,我似乎正在连接到数据库,但是如果我通过调试器运行,则数据表似乎不会被填充。 我的连接字符串,以防万一: 我当前使用的是带有两个记录的测试数据库,而不是最终数据库。我尝试使用Transact-SQL编辑器,但

  • 我的问题是图表包装器的“getDataTable”函数没有“addrow”函数。它似乎返回的是DataView而不是DataTable。我不想保留我的数据的引用,因为它应该在包装中!无论如何,任何帮助都是欢迎的。

  • 问题内容: 我目前正在使用Page_Load中的以下代码创建和读取DataTable 我想知道如何转换此代码,以便它从SQL查询中读取?我正在尝试下面的代码,但不确定如何连接它们,以便页面加载中的数据表使用下面的SQL命令填充。 我被困在: 我希望成为 问题答案: 您需要修改方法,并在其中添加“实验”代码,然后返回。