【问题标题】:jsf composite component convertjsf复合组件转换
【发布时间】:2015-06-01 08:46:41
【问题描述】:

我有一个复合组件

<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

这是怎么引起的,我该如何解决?

【问题讨论】:

  • 我可以解释这个问题,但我无法为您实际尝试实现的任何内容提供正确的解决方案,因为您错误地认为这一切都是正确的解决方案不清楚。我会说你把事情复杂化了,你只需要一个幂等链接。
  • 我正在创建一个复合组件,函数 a4j: jfFunction 必须通过它创建一组我希望转换器成为复杂对象的 id,但我不能将转换器作为属性传递。
  • 是的,从代码中可以清楚地看到。但目前尚不清楚您认为以这种方式实现的具体要求。

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


【解决方案1】:

&lt;cc:editableValueHolder&gt; 应该只引用实现EditableValueHolder interface 的组件。由org.richfaces.component.UIParameter 支持的&lt;a4j:param&gt; 肯定不是这样的。

还有&lt;cc:valueHolder&gt; 应该引用实现ValueHolder interface 的组件,其中converter 实际上是&lt;a4j:param&gt; 的成员,但仍然是neither 实现此接口。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-09
    • 1970-01-01
    • 2011-06-27
    • 2013-03-23
    • 2013-04-22
    • 2011-06-04
    • 1970-01-01
    • 2013-10-17
    相关资源
    最近更新 更多