Primefaces 复合组件未在自动完成外部更新

Primefaces 复合组件未在自动完成外部更新,primefaces,updates,jsf-2.2,composite-component,Primefaces,Updates,Jsf 2.2,Composite Component,我知道这似乎是一个重复的问题(我发现了很多像我一样的问题,但没有一个能解决我的问题)。事实上,只要它可以是我的注意力不足,是的,它可以是一个复制品。这里是:我有两个更新没有很好地工作:最重要的是一个,关于复合组件中的一个按钮(内部有自己的h:form的p:dialog)试图在另一个h:form中更新p:autoComplete。复合还接收一个监听器作为参数,在监听器中,它更新bean的一个属性:这是问题之一——这个属性绑定到p:autoComplete的value属性,在监听器更改其值后,我无法

我知道这似乎是一个重复的问题(我发现了很多像我一样的问题,但没有一个能解决我的问题)。事实上,只要它可以是我的注意力不足,是的,它可以是一个复制品。这里是:我有两个更新没有很好地工作:最重要的是一个,关于复合组件中的一个按钮(内部有自己的h:form的p:dialog)试图在另一个h:form中更新p:autoComplete。复合还接收一个监听器作为参数,在监听器中,它更新bean的一个属性:这是问题之一——这个属性绑定到p:autoComplete的value属性,在监听器更改其值后,我无法更新它

另一个问题是p:inputReset,它显然什么也不做(它应该清除上面相同组合中的输入字段)

我已经用浏览器开发工具检查了更新属性值,它们是正确的

还有一个信息:这个问题是在我把对话框放在一个复合文件中之后开始的。它以前工作得很好

[编辑]:以下是我研究过的一些主题:

  • :复合组件在cc:interface部分中已经有一个update属性,它对解决此问题没有帮助@stg表示,将表单放入复合组件中是一种糟糕的设计,但它会阻止它更新其他组件吗[编辑2]:无论如何,我将表单从组合中移出(并将组件移动到表单中)。问题依然存在
  • :非常详细的@BalusC答案。我已经检查了要更新的组件的路径,它们似乎是正确的(实际上,cc.parent.namingContainer.clientId和其他语法sugar没有获得clientId,可能其中一些已被弃用-答案是在2011年编写的)。无论如何,这里指出的所有工作方法的结果都与我在下面的示例中给出的路径相同
  • :我尝试过使用和不使用引导“:”。没什么区别
互联网上到处都有关于这个话题的其他问题,但它们都是这个问题的变体,大多数问题都可以用@BalusC在上面链接中指出的相同问题来解决

在我的例子中,行为发生在这样的结构中(简化):

模板:

...
<h:body>
    <h:form id="dlgTemplateForm">
        <p:tabView id="tbvMain">
            <ui:insert name="tabs" />
        </p:tabView>
    </h:form>
    <ui:insert name="outsideDlgTemplateForm" />
</h:body>
最后,在com.foo.BeanClass中

private Object obj;
//getter and setter

“(我发现了很多像我一样的问题,但没有一个能解决我的问题)。”见。张贴哪些问题以及为什么他们没有解决这些问题you@Kukeltje,我编辑了问题并粘贴了一些我尝试过的链接。
<ui:define name="tabs">
    <p:tab id="tabInfo">
        <ui:include src="myTab.xhtml" />
    </p:tab>
</ui:define>
<ui:define name="outsideDlgTemplateForm">
    <myComp:dlgComp id="dlgId"
                    widgetVar="dlgIdWGV" bean="#{myPageBean.myPageManagedProperty}"
                    returnListener="#{myPageBean.returnFromDialog}"
                    update=":dlgTemplateForm:tbvMain:acpTest" />
</ui:define>
<p:autoComplete id="acpTest" value="#{myPageBean.prop}" 
                completeMethod="#{myPageBean.acpCompleteText}" />
<p:commandButton actionListener="#{myPage.listener}"
                oncomplete="PF('dlgIdWGV').show();"
                update=":dlgId:dlgForm" process="@this">
    <p:resetInput target=":dlgId:dlgForm" /> <!--this doesn't work too-->
</p:commandButton>
@ManagedProperty(value = "beanClass")
private com.foo.BeanClass myPageManagedProperty;
private Object prop;

//getters and setters

public void returnFromDialog(void) {
    this.prop = myPageManagedProperty.getObj();
}
private Object obj;
//getter and setter