【问题标题】:How to use the parent attribute in jsf components?jsf组件中如何使用父属性?
【发布时间】:2014-10-01 08:07:22
【问题描述】:

我注意到 JSF 组件中有(也许是一个新的)属性“parent”。我相信这是为了指定组件的父级,因此无论组件保存在 xhtml 文件中的哪个位置。可以设置它的父级。

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

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

javax.el.E​​LException:无法将类 java.lang.String 的“addCustomTags_Bx”强制转换为类 javax.faces.component.UIComponent (不兼容的类型)

【问题讨论】:

  • 你能添加一些代码吗?

标签: jsf jsf-2 facelets


【解决方案1】:

我相信它是为了指定组件的父级,因此无论组件在 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>(在标签文件或模板文件的情况下)。

【讨论】:

  • @dforce:没有什么不同。
猜你喜欢
  • 2012-08-30
  • 2017-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-25
  • 2013-08-23
  • 1970-01-01
相关资源
最近更新 更多