我在PrimeFaces对话框中测试了Balusc的inputDate组件:Composite component with multiple input fields 。根本不调用encodeAll
方法,并且未初始化选择框。复合组件放置在文章中所示的形式时工作正常。
为什么encodeAll
在对话框中不起作用以及如何修复?
编辑1
我使用Mojarra 2.1.13和PrimeFaces 3.4.2。
编辑2 这是我真实项目的样本。我使用您的组件来了解复合组件。我有一个视图帐户,带有数据表和工具栏。按Add将打开一个带有自定义向导的对话框。该对话框有自己的形式,但不显示向导。
accounts.xhtml
<h:form id="form">
<ui:include src="/WEB-INF/flows/accounts/accountsTable.xhtml" />
</h:form>
<ui:include src="/WEB-INF/flows/accounts/mainDialog4.xhtml" />
accountsTable.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>
mainDialog4.xhtml
<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>
答案 0 :(得分:2)
这是由于PrimeFaces CoreRenderer
未在UIComponent#encodeAll()
方法中调用renderChildren()
,而是encodeBegin()
,encodeChildren()
和encodeEnd()
。因此,当它被声明为PrimeFaces组件的直接子节点时总是会失败,但是当它被声明为标准JSF组件的直接子节点时它将起作用。
如果您在encodeBegin()
而不是encodeAll()
执行工作,那么它应该可以正常工作。我已相应更新了复合组件文章。
在不相关的说明中,<p:dialog>
应该有自己的形式。