【发布时间】:2010-08-15 13:10:53
【问题描述】:
我有一个复合组件:
<composite:interface>
<composite:attribute name="actionMethod"
method-signature="java.lang.String action()" required="true" />
</composite:interface>
<composite:implementation>
<h:form>
<h:commandButton id="captureButton" value="#{msgs.capture}"
action="#{cc.attrs.actionMethod}" />
</h:form>
</composite:implementation>
以及调用该复合组件的页面:
<ezcomp:captureTitle actionMethod="#{saveDecisionsBean.captureTitle}" />
还有一个包含动作的bean:
@Named(value="saveDecisionsBean")
@SessionScoped
public class SaveDecisionsBean extends BackingBeanBase {
...
public String captureTitle() {
...
}
}
现在这是我的问题。当我尝试运行它时,它说 SaveDecisionsBean 没有属性 captureTitle。因此,我必须添加一个SaveDecisionsBean#getCaptureTitle() 方法。当我这样做时,它运行得很好。为什么我必须定义这个方法?它在<composite:attribute /> 中说它是一个方法,它被用作一个动作。
这是我得到的确切错误消息:
javax.el.PropertyNotFoundException: /index.xhtml @54,86
actionMethod="#{saveDecisionsBean.captureTitle}":
The class 'com.example.persistence.SaveDecisionsBean_$$_javassist_209'
does not have the property 'captureTitle'.
(出于 SEO 原因:其他实现可能会显示类名 WeldClientProxy。)
【问题讨论】:
-
作为注释,如果类名相同,则不必写@Named(value="saveDecisionsBean")
-
它在 NetBeans 中默认这样做。
-
顺便说一句,如果上述方法可行,那么也可以使用
<composite:attribute name="actionMethod" targets="captureButton" required="true" />,因此无需method-signature。但同样的问题。 -
仅供参考。基础错误已修复。 java.net/jira/browse/JAVASERVERFACES-1806
标签: jsf jsf-2 composite-component