jsf复合组件转换

时间:2015-06-01 08:46:41

标签: jsf jsf-2 classcastexception composite-component param

我有一个复合组件

<cc:interface>
    <cc:attribute name="value" required="true" />       
    <cc:editableValueHolder name="converter" targets="jsFunction"/>
</cc:interface>

<a4j:jsFunction name="update">
    <a4j:param name="val" assignTo="#{cc.value}" id="jsFunction" />
</a4j:jsFunction>

用作

<my:update value="#{bean.value}" >
  <f:converter converterId="beanConverter" for="converter"/>
</my:update>

打开页面时出现以下错误

Caused by: java.lang.ClassCastException: org.richfaces.component.UIParameter cannot be cast to javax.faces.component.ValueHolder
at com.sun.faces.facelets.tag.jsf.ConverterTagHandlerDelegateImpl.applyAttachedObject(ConverterTagHandlerDelegateImpl.java:120) [javax.faces-2.2.11.jar:2.2.11]
    at javax.faces.view.facelets.FaceletsAttachedObjectHandler.applyAttachedObject(FaceletsAttachedObjectHandler.java:98) [javax.faces-2.2.11.jar:2.2.11]
    at com.sun.faces.application.view.FaceletViewHandlingStrategy.retargetHandler(FaceletViewHandlingStrategy.java:1416) [javax.faces-2.2.11.jar:2.2.11]
    at com.sun.faces.application.view.FaceletViewHandlingStrategy.retargetAttachedObjects(FaceletViewHandlingStrategy.java:673) [javax.faces-2.2.11.jar:2.2.11]
    at com.sun.faces.facelets.tag.jsf.CompositeComponentTagHandler.applyNextHandler(CompositeComponentTagHandler.java:199) [javax.faces-2.2.11.jar:2.2.11]
    at org.richfaces.view.facelets.html.BehaviorsAddingComponentHandlerWrapper.applyNextHandler(BehaviorsAddingComponentHandlerWrapper.java:53) [richfaces-a4j-4.5.5.Final.jar:4.5.5.Final]
    at com.sun.faces.facelets.tag.jsf.ComponentTagHandlerDelegateImpl.apply(ComponentTagHandlerDelegateImpl.java:202) [javax.faces-2.2.11.jar:2.2.11]
    at javax.faces.view.facelets.DelegatingMetaTagHandler.apply(DelegatingMetaTagHandler.java:120) [javax.faces-2.2.11.jar:2.2.11]
    at javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:95) [javax.faces-2.2.11.jar:2.2.11]
    at javax.faces.view.facelets.DelegatingMetaTagHandler.applyNextHandler(DelegatingMetaTagHandler.java:137) [javax.faces-2.2.11.jar:2.2.11]
    at org.richfaces.view.facelets.html.BehaviorsAddingComponentHandlerWrapper.applyNextHandler(BehaviorsAddingComponentHandlerWrapper.java:53) [richfaces-a4j-4.5.5.Final.jar:4.5.5.Final]
    at com.sun.faces.facelets.tag.jsf.ComponentTagHandlerDelegateImpl.apply(ComponentTagHandlerDelegateImpl.java:202) [javax.faces-2.2.11.jar:2.2.11]
    at javax.faces.view.facelets.DelegatingMetaTagHandler.apply(DelegatingMetaTagHandler.java:120) [javax.faces-2.2.11.jar:2.2.11]
    at javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:95) [javax.faces-2.2.11.jar:2.2.11]
    at javax.faces.view.facelets.DelegatingMetaTagHandler.applyNextHandler(DelegatingMetaTagHandler.java:137) [javax.faces-2.2.11.jar:2.2.11]
    at org.richfaces.view.facelets.html.BehaviorsAddingComponentHandlerWrapper.applyNextHandler(BehaviorsAddingComponentHandlerWrapper.java:53) [richfaces-a4j-4.5.5.Final.jar:4.5.5.Final]
    at com.sun.faces.facelets.tag.jsf.ComponentTagHandlerDelegateImpl.apply(ComponentTagHandlerDelegateImpl.java:202) [javax.faces-2.2.11.jar:2.2.11]
    at javax.faces.view.facelets.DelegatingMetaTagHandler.apply(DelegatingMetaTagHandler.java:120) [javax.faces-2.2.11.jar:2.2.11]
    at javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:95) [javax.faces-2.2.11.jar:2.2.11]
    at javax.faces.view.facelets.DelegatingMetaTagHandler.applyNextHandler(DelegatingMetaTagHandler.java:137) [javax.faces-2.2.11.jar:2.2.11]
    at org.richfaces.view.facelets.html.BehaviorsAddingComponentHandlerWrapper.applyNextHandler(BehaviorsAddingComponentHandlerWrapper.java:53) [richfaces-a4j-4.5.5.Final.jar:4.5.5.Final]
    at com.sun.faces.facelets.tag.jsf.ComponentTagHandlerDelegateImpl.apply(ComponentTagHandlerDelegateImpl.java:202) [javax.faces-2.2.11.jar:2.2.11]
    at javax.faces.view.facelets.DelegatingMetaTagHandler.apply(DelegatingMetaTagHandler.java:120) [javax.faces-2.2.11.jar:2.2.11]
    at com.sun.faces.facelets.tag.ui.DefineHandler.applyDefinition(DefineHandler.java:106) [javax.faces-2.2.11.jar:2.2.11]
    at com.sun.faces.facelets.tag.ui.CompositionHandler.apply(CompositionHandler.java:206) [javax.faces-2.2.11.jar:2.2.11]
    at com.sun.faces.facelets.impl.DefaultFaceletContext$TemplateManager.apply(DefaultFaceletContext.java:395) [javax.faces-2.2.11.jar:2.2.11]
    at com.sun.faces.facelets.impl.DefaultFaceletContext.includeDefinition(DefaultFaceletContext.java:366) [javax.faces-2.2.11.jar:2.2.11]
    at com.sun.faces.facelets.tag.ui.InsertHandler.apply(InsertHandler.java:111) [javax.faces-2.2.11.jar:2.2.11]
    at javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:95) [javax.faces-2.2.11.jar:2.2.11]
    at javax.faces.view.facelets.DelegatingMetaTagHandler.applyNextHandler(DelegatingMetaTagHandler.java:137) [javax.faces-2.2.11.jar:2.2.11]
    at org.richfaces.view.facelets.html.BehaviorsAddingComponentHandlerWrapper.applyNextHandler(BehaviorsAddingComponentHandlerWrapper.java:53) [richfaces-a4j-4.5.5.Final.jar:4.5.5.Final]
    at com.sun.faces.facelets.tag.jsf.ComponentTagHandlerDelegateImpl.apply(ComponentTagHandlerDelegateImpl.java:202) [javax.faces-2.2.11.jar:2.2.11]
    at javax.faces.view.facelets.DelegatingMetaTagHandler.apply(DelegatingMetaTagHandler.java:120) [javax.faces-2.2.11.jar:2.2.11]
    at javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:95) [javax.faces-2.2.11.jar:2.2.11]
    at com.sun.faces.facelets.tag.jsf.core.ViewHandler.apply(ViewHandler.java:225) [javax.faces-2.2.11.jar:2.2.11]
    at javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:95) [javax.faces-2.2.11.jar:2.2.11]
    at com.sun.faces.facelets.compiler.NamespaceHandler.apply(NamespaceHandler.java:93) [javax.faces-2.2.11.jar:2.2.11]
    at com.sun.faces.facelets.compiler.EncodingHandler.apply(EncodingHandler.java:87) [javax.faces-2.2.11.jar:2.2.11]
    at com.sun.faces.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:312) [javax.faces-2.2.11.jar:2.2.11]
    at com.sun.faces.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:371) [javax.faces-2.2.11.jar:2.2.11]
    at com.sun.faces.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:350) [javax.faces-2.2.11.jar:2.2.11]
    at com.sun.faces.facelets.impl.DefaultFaceletContext.includeFacelet(DefaultFaceletContext.java:199) [javax.faces-2.2.11.jar:2.2.11]
    at com.sun.faces.facelets.tag.ui.CompositionHandler.apply(CompositionHandler.java:174) [javax.faces-2.2.11.jar:2.2.11]
    at com.sun.faces.facelets.compiler.NamespaceHandler.apply(NamespaceHandler.java:93) [javax.faces-2.2.11.jar:2.2.11]
    at com.sun.faces.facelets.compiler.EncodingHandler.apply(EncodingHandler.java:87) [javax.faces-2.2.11.jar:2.2.11]
    at com.sun.faces.facelets.impl.DefaultFacelet.apply(DefaultFacelet.java:161) [javax.faces-2.2.11.jar:2.2.11]
    at com.sun.faces.application.view.FaceletViewHandlingStrategy.buildView(FaceletViewHandlingStrategy.java:994) [javax.faces-2.2.11.jar:2.2.11]
    at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:99) [javax.faces-2.2.11.jar:2.2.11]
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) [javax.faces-2.2.11.jar:2.2.11]
    at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:219) [javax.faces-2.2.11.jar:2.2.11]
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:655) [javax.faces-2.2.11.jar:2.2.11]
    ... 63 more

这是如何引起的?如何解决?

1 个答案:

答案 0 :(得分:0)

<cc:editableValueHolder>应仅引用实施EditableValueHolder interface的组件。由org.richfaces.component.UIParameter支持的<a4j:param>肯定不是这样的。

还有<cc:valueHolder>应该引用实施ValueHolder interface的组件,其中converter实际上是<a4j:param> neither个元素的成员这个界面。

总而言之,无论你想要实现什么,都是不可能的。您需要寻找一种不同的方法来解决您尝试使用这种错误方法解决的问题。请注意,此问题与复合组件无关。即使在复合材料之外,您也无法在<a4j:param>上应用转换器。

相关问题