我注意到JSF组件中有(可能是一个新的)属性“parent”。我相信它意味着指定组件的父级,因此无论组件保存在xhtml文件中的哪个位置。其父母可能已设定。
但我没有成功地使用它。如果知道所需JSF组件的id或clientid,如何使用它来指定组件的父级?
当我尝试将父组件的id指定为“parent”属性值时,我收到以下错误:
javax.el.ELException:无法强制类java.lang.String的'addCustomTags_Bx'到类javax.faces.component.UIComponent (不兼容的类型)
答案 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>
(如果是标记文件或模板文件)。