【问题标题】:Migrate composite-component to custom-component将复合组件迁移到自定义组件
【发布时间】:2013-05-25 15:54:30
【问题描述】:

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

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

显然(至少我希望我的假设是正确的)我不能简单地在encodeBegin 中渲染p:panel

@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 面板中呈现。如何在我的 Java 类中编码 p:panel 的用法?

【问题讨论】:

  • 我不明白具体的问题/问题(事实上,没有具体的问题)。您是否具体询问如何在自定义组件中编码&lt;p:panel&gt; 的相同输出?或者您是否具体询问如何为该部分重用&lt;p:panel&gt; 的默认编码器(渲染器)?孩子们根本不是问题,因为encodeChildren() 会自动完成这一切,但是第一段的最后一句话似乎另有说明,这令人困惑。
  • @BalusC 感谢您关注此问题。我已经更新了这个问题,希望现在能更好地理解。回答您的问题:我正在尝试对 p:panel 的相同输出进行编码。

标签: java jsf-2 facelets composite-component


【解决方案1】:

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

但是你可以做什么:

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

  • 直接渲染 HTML

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

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

【讨论】:

    猜你喜欢
    • 2013-01-23
    • 1970-01-01
    • 2022-11-04
    • 2022-06-29
    • 1970-01-01
    • 1970-01-01
    • 2011-08-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多