如何在jsf组件中使用parent属性?

时间:2014-10-01 08:07:23

标签: jsf jsf-2 facelets

我注意到JSF组件中有(可能是一个新的)属性“parent”。我相信它意味着指定组件的父级,因此无论组件保存在xhtml文件中的哪个位置。其父母可能已设定。

但我没有成功地使用它。如果知道所需JSF组件的id或clientid,如何使用它来指定组件的父级?

当我尝试将父组件的id指定为“parent”属性值时,我收到以下错误:

  

javax.el.E​​LException:无法强制类java.lang.String的'addCustomTags_Bx'到类javax.faces.component.UIComponent   (不兼容的类型)

1 个答案:

答案 0 :(得分:2)

  

我认为它是指定组件的父级,因此无论xhtml文件中的组件位于何处

不。 #{component.parent}返回组件的父组件,由UIComponent#getParent()提供,并且自1.0以来一直在JSF中。正如javadoc所述,该属性的类型为UIComponent,而不是String。这完全解释了您在尝试使用String进行设置时遇到的EL异常。

还有UIComponent#setParent()方法,但您不应该使用它。另请参阅javadoc(重点是我的):

  

public abstract void setParent(UIComponent parent)

     

...

     

开发人员绝不能调用此方法; UIComponent内部实施将在父母的小孩List或方面Map中添加或删除组件时调用它。

因此,无论您想到什么功能要求,都必须以不同方式解决。将来,最好问一个关于X instead of Y的问题。您很可能需要<f:facet>(如果是自定义组件或复合组件)或<ui:define>(如果是标记文件或模板文件)。