6

我必须将复合组件迁移到自定义组件。此示例相当简化,但说明了问题:我的组件 ( my:test) 的子组件需要在另一个组件中呈现。复合材料my:testC,作为我不想使用的一个例子,看起来像这样

<composite:implementation>
  <p:panel>
    <composite:insertChildren/>
  </p:panel>
</composite:implementation>

显然(至少我希望我对这个假设是正确的)我不能简单地渲染p:panelin encodeBegin

@FacesComponent("test")
public class Test extends UIPanel
{   
  @Override
  public void encodeBegin(FacesContext context) throws IOException
  {
    // ??
  }

  @Override
  public void encodeEnd(FacesContext context) throws IOException
  {
   // ??
  }
}

我想以my:test这样的方式使用:

<my:test>
  <h:outputText value="some Text"/>
</my:test>

输出应该与使用相同my:testC:在 PrimeFaces 面板中呈现的一些文本。如何编码p:panel我的 Java 类中的用法?

4

1 回答 1

0

您正确地观察到了这一点。您不能简单地在自定义组件中呈现“p:panel”或任何其他 jsf 标记。

但是,您可以做什么:

  • 使用 Application 实例实例化子组件,将其作为 facet 或子组件添加到您的自定义组件,然后在您自己的渲染器中对其调用 encode。

  • 直接渲染 HTML

  • 使用当前 JSF 中应该可用的 facelet API(我从未真正使用过)

  • 使用任何其他模板处理,如velocity 或freemarker 来呈现HTML。

于 2013-07-05T09:27:40.300 回答