在复合组件的构面内使用输入

时间:2014-10-21 12:03:55

标签: jsf-2

我在我的应用程序中使用复合组件,在标签视图中声明并呈现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.

谢谢!

1 个答案:

答案 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>

它至少对我来说是一个工作场所。唯一的问题是,有时您必须在复合材料的不同位置渲染多个子项。