Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf 如何访问Composite的父命名容器?_Jsf_Jsf 2_Primefaces_Composite Component_Clientid - Fatal编程技术网

Jsf 如何访问Composite的父命名容器?

Jsf 如何访问Composite的父命名容器?,jsf,jsf-2,primefaces,composite-component,clientid,Jsf,Jsf 2,Primefaces,Composite Component,Clientid,我有一个jsp2.0,其中有一个,其中有一个列,该列使用组合来呈现有关某些内容的特殊边框。现在,我需要在内容中的ajax呈现属性中标识 <ui:component> <p:dataTable id="dataTable" var="userItem" ... /> <p:column> <my:borderBox id="borderBox"> <p:commandButton

我有一个jsp2.0
,其中有一个
,其中有一个列,该列使用组合来呈现有关某些内容的特殊边框。现在,我需要在内容中的ajax呈现属性中标识

<ui:component>
  <p:dataTable id="dataTable" var="userItem" ... />
    <p:column>

        <my:borderBox id="borderBox">
           <p:commandButton
               action="#{userController.doDelete(userItem.id)}"
               value="delete" 
               update="?????"/>  <!-- How to address the dateTable? -->
        </my:borderBox>

      </p:column>
    </p:dataTable>
 <ui:component>
我得到这个输出:

Parent ClientId 1: javax.faces.component.html.HtmlPanelGroup@3d957419

Parent ClientId 2: javax.faces.component.UINamingContainer@23db9e8f
Parent ClientId 3: main_form:profilTabView:dataTable:0:borderBox

Parent ClientId 4:
Parent ClientId 5: 
我不知道问题出在哪里:mybey我确定列表的想法是完全错误的,还是有一些错误,或者有更好的方法?(但我不能对日期表使用fix absolute Identifier!)


版本:Glassfish 3.1.2上的Primeface 3.2、Mojarra 2.1.6

我有一个解决此问题的方法。如果你找不到另一个解决方案,你可以用它作为替代方案。解决方案是jsf和javascript的混合。为您的表定义一个小部件(例如“myTable”)


它是一个名为“myTable”的全局javascript变量。此小部件对象包含一个id。对于命令按钮(h:commandButton而不是p:commandButton),您可以定义onklick事件:

<h:commandButton id="deleteItem" action="#{userController.doDelete(userItem.id)}"
 value="delete" onclick="PrimeFaces.ab({formId:$(this).closest('form').attr('id'),source:this.id,process:'@all',update:myTable.id});return false;" /> 


formId-您可以显式输入表单ID或使用my Jquery函数
update-myTable.id是一个表id(确切地说是div包装器)

进程-@all、@this、@form等…

不幸的是,我没有使用
ui:component
标记,所以我对它知之甚少;我通常使用复合组件,您可以从EL表达式引用父命名容器,如
{cc.parent.id}
。然而,我认为
parent
在EL表达式语言中是一个保留变量,因此它应该像
{parent.id}
一样简单,以检索父命名容器id。@maple\u shaft:
由复合组件隐式使用。因此,直接声明它比
更干净。您使用的究竟是哪个JSF impl/版本和PF版本?@BalusC:我使用的是未经修改的Glassfish 3.1.2(如果是bug,我可以更新为3.1.2.2),因此它是Mojarra 2.1.6;Primeface是3.2版。您是否解决了此问题?
Parent ClientId 1: javax.faces.component.html.HtmlPanelGroup@3d957419

Parent ClientId 2: javax.faces.component.UINamingContainer@23db9e8f
Parent ClientId 3: main_form:profilTabView:dataTable:0:borderBox

Parent ClientId 4:
Parent ClientId 5: 
<p:dataTable id="dataTable" var="userItem" ...  widgetVar="myTable"/>
<h:commandButton id="deleteItem" action="#{userController.doDelete(userItem.id)}"
 value="delete" onclick="PrimeFaces.ab({formId:$(this).closest('form').attr('id'),source:this.id,process:'@all',update:myTable.id});return false;" />