Jsf 2 在复合构件上使用输入内部镶嵌面
我在应用程序中使用一个复合组件,该组件在选项卡视图中声明并呈现一个方面部分:Jsf 2 在复合构件上使用输入内部镶嵌面,jsf-2,Jsf 2,我在应用程序中使用一个复合组件,该组件在选项卡视图中声明并呈现一个方面部分: <composite:facet name="ambienteEspecifico" required="true"/> ... <p:tabView value="#{cc.attrs.gerenciador.entries}" var="servidor"> <p:tab title="#{servidor.key}"> <composite:renderFa
<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>
服务器返回一个“无法访问的目标,标识符'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>
它也可以正常工作,不会引发任何异常。我是在对付一只虫子吗?
顺便说一下,我使用的是jsf2.2.2.
谢谢 根据Ali C的建议,使用
解决了问题
<p:tabView value="#{cc.attrs.gerenciador.entries}" var="servidor">
<p:tab title="#{servidor.key}">
<composite:insertChildren/>
</p:tab>
</p:tabView>
至少对我来说,这是一个解决办法。唯一的问题是,有时必须在合成的不同位置渲染多个子对象。与输出不同,输入需要一个非空对象来操作。不知何故,servidor在到达AmienteSpecifico时为null。奇怪的是,即使抛出异常,输入也会显示默认值server.value.espaco。我尝试在构造函数中将其设置为5,并且值5显示在输入中。我不认为服务器为空,因为输出显示了server.value.espaco的实际值。奇怪的是,即使在输入中显示值5,但应用程序抛出PropertyNotFound异常。不确定为什么会发生这种情况。您是否可以使用它来代替?我知道其中一个是有效的,因为它不在乎你放了什么,它只会按原样插入到组合中,然后再创建到组件树中。我已经用insertChildren测试了代码,它成功了,但是我不能使用insertChildren,因为我有多个标签,必须插入到复合组件的不同位置。最后,我别无选择,只能更改代码以支持insertChildren。