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

Tho*_*hor 6 java facelets composite-component jsf-2

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

<composite:implementation>
  <p:panel>
    <composite:insertChildren/>
  </p:panel>
</composite:implementation>
Run Code Online (Sandbox Code Playgroud)

显然,(我希望至少我这个假设是正确的),我不能简单地呈现p:panelencodeBegin.

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

  @Override
  public void encodeEnd(FacesContext context) throws IOException
  {
   // ??
  }
}
Run Code Online (Sandbox Code Playgroud)

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

<my:test>
  <h:outputText value="some Text"/>
</my:test>
Run Code Online (Sandbox Code Playgroud)

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

小智 0

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

然而你可以做什么:

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

  • 直接渲染 HTML

  • 使用当前 JSF 中应该可用的 Facelet API(我从未实际使用过它)

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