【发布时间】:2013-08-22 14:51:33
【问题描述】:
我想使用一个支持组件作为一个层来访问我的复合组件的属性(在其接口中定义)。 我想要实现的是通过我的支持组件类读取我的组件的属性,我在其中返回所提供属性的属性值。
public String getName() {
if (this.name == null) {
this.name = getAttributes().get("name");
}
return this.name;
}
但是当设置一个新值时,例如通过一个输入字段,我只想将值存储在我的支持 bean 属性中,而不是更新作为属性参数传递给我的复合组件的原始属性的值。
public void setName(final String name) {
this.name = name;
}
我现在的问题是,当我的支持组件的 getter 第一次或在他生命的某个早期阶段被调用时,如上所示的 getter 代码会导致 Stackoverflow 异常,因为 getAttributes.get("name") 调用我的支持组件(本身)的 getter 而是获取提供给我的复合组件的属性/属性。 有趣的部分是使用一个简单的 getter 只返回 this.name 而不是调用 getAttributes() 我可以在那里设置一个断点然后调用 getAttributes.get("name") (通过调试器)不会导致溢出/调用它自己的 getter 但而是返回提供给我的复合组件的属性。
我猜这与支持组件和复合组件之间的耦合有关。当第一次调用 getter 时,没有给出它们之间的耦合,因此调用 getAttributes.get("name") 会导致调用我的支持组件的 getter,而后来调用不会调用它自己的 getter,而是获取提供给我的 comp 组件的属性。
有人知道如何解决这个问题吗? 提前谢谢。
【问题讨论】:
-
getAttributes()的代码呢,能分享一下吗?它在同一个支持 bean 中吗?
-
@cheffe:它只是继承自
UIComponent类。 xstring,我冒昧地从问题中删除了[java]和[ejb]标签,因为这个问题根本与此无关,只会吸引像上面这样无用的 cmets。
标签: jsf jsf-2 composite-component