【问题标题】:Using input inside facets on composite components在复合组件的构面内使用输入
【发布时间】:2014-12-16 15:38:03
【问题描述】:

我在我的应用程序中使用了一个复合组件,它在选项卡视图中声明和呈现一个方面部分:

<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'解析为空: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.

谢谢!

【问题讨论】:

  • 与输出不同,输入需要一个非空对象来操作。不知何故,servidor 在到达 amienteEspecifico 时为空。
  • 奇怪的是,即使抛出异常,输入也会显示 server.value.espaco 的默认值。我尝试在构造函数上将其设置为 5,并且值 5 显示在输入中。
  • 我不认为 server 为空,因为输出显示了 server.value.espaco 的真实值。奇怪的是,即使在输入中显示了值 5,但应用程序会抛出 PropertyNotFound 异常。
  • 不知道为什么会这样。您可以选择使用 代替吗?我知道它可以工作,因为它不在乎您放入什么,它只会将其按原样插入到组合中,然后再将其创建到组件树中。
  • 我已经用 insertChildren 测试了代码并且它有效,但是我不能使用 insertChildren,因为我有多个标签,我必须在复合组件的不同位置插入。最后我别无选择,只能更改我的代码以支持 insertChildren。

标签: jsf-2


【解决方案1】:

正如 Ali C 所建议的,使用&lt;composite:insertChildren/&gt; 解决了这个问题。

<p:tabView value="#{cc.attrs.gerenciador.entries}" var="servidor">
  <p:tab title="#{servidor.key}">
    <composite:insertChildren/>
  </p:tab>
</p:tabView>

至少对我来说,它可以作为一种解决方法。唯一的问题是,有时您必须在复合材料的不同位置渲染多个子节点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-05
    • 2011-12-19
    • 1970-01-01
    • 2015-11-06
    • 1970-01-01
    • 2013-08-02
    • 2012-10-21
    • 1970-01-01
    相关资源
    最近更新 更多