Java 当复合组件放置在PrimeFaces p:对话框中时,不会调用encodeAll方法

Java 当复合组件放置在PrimeFaces p:对话框中时,不会调用encodeAll方法,java,jsf-2,primefaces,dialog,composite-component,Java,Jsf 2,Primefaces,Dialog,Composite Component,我已经测试了Balusc的inputDate组件:在PrimeFaces对话框中。根本不调用encodeAll方法,也不初始化选择框。复合构件以本文所示的形式放置时,效果良好 为什么encodeAll在对话框中不起作用,如何修复 编辑1 我使用Mojarra 2.1.13和PrimeFaces 3.4.2 编辑2 这是我真实项目的一个样本。我使用您的组件来了解复合组件。我有一个视图帐户,有一个数据表和一个工具栏。按Add将打开一个带有自定义向导的对话框。对话框有自己的窗体,但不显示向导 acco

我已经测试了Balusc的inputDate组件:在PrimeFaces对话框中。根本不调用encodeAll方法,也不初始化选择框。复合构件以本文所示的形式放置时,效果良好

为什么encodeAll在对话框中不起作用,如何修复

编辑1

我使用Mojarra 2.1.13和PrimeFaces 3.4.2

编辑2 这是我真实项目的一个样本。我使用您的组件来了解复合组件。我有一个视图帐户,有一个数据表和一个工具栏。按Add将打开一个带有自定义向导的对话框。对话框有自己的窗体,但不显示向导

accounts.xhtml

mainDialog4.xhtml


这是因为PrimeFaces没有在renderChildren方法中调用UIComponentencodeAll,而是分别调用EncodeBeagin、encodeChildren和encodeEnd。因此,当它被声明为PrimeFaces组件的直接子级时,它总是会失败,但当它被声明为标准JSF组件的直接子级时,它会工作

如果您在encodeBegin而不是encodeAll中执行作业,那么它应该可以工作。我已经相应地更新了复合组件文章


另一方面,应该有自己的形式。

不能在Tomcat 7.0.37上使用Mojarra 2.1.20和PrimeFaces 3.5复制它。在以后的问题中,请提及使用的确切库impl/版本,并包括。添加了库信息。现在还没有SSCCE。我至少不能在中用这个最小的代码片段来复制它:我已经进行了不同的测试:这是无效的对话框语法。对话框不应以任何形式放置,而应具有自己的形式。
<h:form id="form">
    <ui:include src="/WEB-INF/flows/accounts/accountsTable.xhtml" />    
</h:form>
<ui:include src="/WEB-INF/flows/accounts/mainDialog4.xhtml" />  
<p:dataTable id="accounts" ... />  

<p:toolbar>
    <p:toolbarGroup align="left">
        <p:commandButton value="Add"
            action="#{accountsBean.initializeEntity}"
            process="@this" update=":actionsDialog4"
            oncomplete="actionsDialogWidget4.show()">
            <f:setPropertyActionListener value="#{2}"
                target="#{accountsBean.operation}" />
            <f:setPropertyActionListener value="accountsBean"
                target="#{sessionScope.beanName}" />
        </p:commandButton>
    </p:toolbarGroup>
 </p:toolbar>
<p:dialog id="actionsDialog4" widgetVar="actionsDialogWidget4" dynamic="true"
    modal="true">       
    <h:form>
    <costom:actionWizard name="wizard" widgetVar="wiz" bean="#{accountsBean}" header="#{accountsBean.entityHeader}" />
    </h:form>
</p:dialog>