我在我的应用程序中使用复合组件,在标签视图中声明并呈现facet部分:
<composite:facet name="ambienteEspecifico" required="true"/>
...
<p:tabView value="#{cc.attrs.gerenciador.entries}" var="servidor">
<p:tab title="#{servidor.key}">
<composite:renderFacet name="ambienteEspecifico"/>
</p:tab>
</p:tabView>...
问题是当我使用组件时,如果我输入任何输入标签:
<f:facet name="ambienteEspecifico">
<h:inputText value="#{servidor.value.espaco}"/>
</f:facet>
服务器返回“Target Unreachable,标识符'servidor'解析为null:javax.el.PropertyNotFoundException”。如果我更改为输出标记:
<f:facet name="ambienteEspecifico">
<p:outputLabel value="#{servidor.value.espaco}" />
</f:facet>
正确显示该值,不会抛出任何异常。所以似乎问题只与输入组件有关。如果我将输入标记放在组件端:
<p:tabView value="#{cc.attrs.gerenciador.entries}" var="servidor">
<p:tab title="#{servidor.key}">
<composite:renderFacet name="ambienteEspecifico"/>
<h:inputText value="#{servidor.value.espaco}"/>
</p:tab>
</p:tabView>
它也可以在没有任何异常的情况下运行。我在处理一个错误吗?
顺便说一下,我正在使用jsf 2.2.2.
谢谢!
答案 0 :(得分:0)
正如Ali C所建议的,使用<composite:insertChildren/>
解决了这个问题。
<p:tabView value="#{cc.attrs.gerenciador.entries}" var="servidor">
<p:tab title="#{servidor.key}">
<composite:insertChildren/>
</p:tab>
</p:tabView>
它至少对我来说是一个工作场所。唯一的问题是,有时您必须在复合材料的不同位置渲染多个子项。