是否可以扩展/覆盖组件类,“cc.myFunc”将在facelet中可用?

时间:2010-11-23 11:33:00

标签: jsf-2

我已经在这里问了两个关于这个问题的问题,但答案没有提供信息。可能是我没有解释好,我想要什么。现在,我将更具体。我知道“复合组件是Facelets的一个特性,而不是JSF的特性”,我知道“Facelets是Facelets是一个以JSF为设计理念的视图技术”。我不确切知道,但我想缩写“cc.attrs”和“cc.clientId”假设,在场景后面有一些用于组件的java类。我想知道,是否有可能以“cc.myFunc”可用的方式覆盖/扩展它?

1 个答案:

答案 0 :(得分:1)

您可以为复合组件提供自定义类。要求是类必须是UIComponent并实现接口NamingContainer。您可以扩展一个基类UINamingContainer。

要在复合材料中声明它,请使用以下内容:

<cc:interface componentType="my.CustomComponent">
</cc:interface>

这个课可能是这样的:

@FacesComponent("my.CustomComponent") //Component type in the composite
public class AComponent extends UINamingContainer{
     private int a;      

     //setter and getter for a

     public void sayHello(){
        System.out.println("Hello");
     }

}

请注意,componentType属性的值是FacesComponent注释的值。

在复合组件的实现中,您将使用#{cc.sayHello()} 。括号是必需的,因为没有它们,Facelets ELResolver会尝试查找属性sayHello。