是否可以扩展渲染器以进行自定义控制或XPage?

时间:2013-08-29 07:58:47

标签: xpages

我已经阅读了有关从Naveen Maurya,Keith Strickland和Martin Rolph创建自定义渲染器的有趣文章,并且想知道是否可以对自定义控件和XPage执行相同的操作。

我发现自定义控件的渲染器类com.ibm.xsp.Include用于自定义控件,而com.ibm.xsp.ViewRootEx用于XPage,但Eclipse找不到这些类。

如果可能,我想做的是修改生成的html,就像Martin Rolph和Keith Strickland在他们的示例中所做的那样,但是在自定义控件和/或xPage级别进行一次更改而不是每个自定义控件

1 个答案:

答案 0 :(得分:4)

com.ibm.xsp.Includecom.ibm.xsp.ViewRootEx分别是自定义控件和XPage的渲染器类型。渲染器类型是一个Java类(尽管从命名约定看它可能看起来像一个)。 Renderer的Java类在<renderer-class>标记中定义,如下面给出的示例所示。

<render-kit>
  <renderer>
    <component-family>javax.faces.SelectOne</component-family>
    <renderer-type>uk.co.pipalia.type.ReadOnlyRenderer</renderer-type>
    <renderer-class>uk.co.pipalia.ReadOnlyRenderer</renderer-class>
  </renderer>
</render-kit>

要获取任何控件的关联渲染器Java类的名称,可以使用以下代码:

getComponent("controlName").getRenderer(facesContext).getRenderer().getClass().getName();

对于XPage,渲染器类为com.ibm.xsp.renderkit.html_basic.ViewRootRendererEx2,自定义控件为渲染器类com.ibm.xsp.renderkit.html_basic.IncludeRenderer

您现在可以使用像Martin和Keith这样的扩展这些类来生成您自己的自定义HTML。