将复合组件迁移到自定义组件

时间:2013-05-30 07:07:37

标签: java jsf-2 facelets composite-component

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

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

显然(至少我希望我对这个假设是正确的)我不能简单地在p:panel中呈现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>

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

1 个答案:

答案 0 :(得分:0)

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

但是你可以做什么:

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

  • 直接呈现HTML

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

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