【问题标题】:primefaces tree drag,drop ajax eventprimefaces 树拖放 ajax 事件
【发布时间】:2014-01-21 12:33:11
【问题描述】:

我有这个错误:

2014 年 1 月 3 日下午 6:43:56 com.sun.faces.context.PartialViewContextImpl 过程部分信息:java.lang.ClassCastException: javax.faces.event.ValueChangeEvent 不能强制转换为 javax.faces.event.AjaxBehaviorEvent java.lang.ClassCastException: javax.faces.event.ValueChangeEvent 不能强制转换为 javax.faces.event.AjaxBehaviorEvent

xhtml 中的树:

                <p:tree id="catTree"
                        value="#{listCatsRenderer.categoryTree}" var="ndt"
                        selectionMode="single" 
                        selection="#{listCatsRenderer.selectedNode}"
                        draggable="true"
                        droppable="true"
                        animate="true" styleClass="tree_general"
                        propagateSelectionUp="false"
                        dynamic="true"
                        >

                    <p:ajax event="dragdrop" listener="#{listCatsRenderer.onDragDrop}" update=":main:catTree"/>

                    <p:treeNode>
                        <p:inplace event="dblclick" editor="true" >
                            <h:inputText value="#{ndt.name}"/>
                        </p:inplace>
                    </p:treeNode>  
                </p:tree>

从 bean 加载在这里:

@Named
@SessionScoped
public class ListCatsRenderer extends ARenderer implements Serializable {
.
.
.
@Override
public TreeNode getCategoryTree() {
    if (categoryTree == null) {
        updateCategoryTree(); //DBS load
    } 
    return categoryTree;
}

在任何拖放事件之后,它都会引发异常。当我打开上述条件时,它可以正常工作。知道为什么吗? 谢谢。

//编辑 流程事件的代码,但我认为它永远不会到达那里

public void onDragDrop(TreeDragDropEvent event) {
    System.out.println("dragged: " + event.getDragNode());
    System.out.println("dropped: " + event.getDropNode() + " > " + event.getDropIndex());
}

完整的堆栈跟踪可能会有所帮助:

2014 年 1 月 5 日上午 11:50:28 com.sun.faces.lifecycle.ProcessValidationsPhase 执行警告: java.lang.ClassCastException: javax.faces.event.ValueChangeEvent 不能转换为 javax.faces.event.AjaxBehaviorEvent javax.faces.FacesException:java.lang.ClassCastException: javax.faces.event.ValueChangeEvent 不能强制转换为 javax.faces.event.AjaxBehaviorEvent 在 com.sun.faces.context.PartialViewContextImpl.processPartial(PartialViewContextImpl.java:270) 在 org.primefaces.context.PrimePartialViewContext.processPartial(PrimePartialViewContext.java:57) 在 javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:1193) 在 com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:76) 在 com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) 在 com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198) 在 javax.faces.webapp.FacesServlet.service(FacesServlet.java:646) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 在 org.jboss.weld.servlet.ConversationFilter.doFilter(ConversationFilter.java:66) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 在 org.apache.catalina.filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:108) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 在 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222) 在 org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) 在 org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) 在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) 在 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99) 在 org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936) 在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) 在 org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004) 在 org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589) 在 org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 在 java.lang.Thread.run(Thread.java:724) 引起: java.lang.ClassCastException: javax.faces.event.ValueChangeEvent 不能转换为 javax.faces.event.AjaxBehaviorEvent 在 org.primefaces.component.tree.Tree.queueEvent(Tree.java:308) 在 javax.faces.component.UIComponentBase.queueEvent(UIComponentBase.java:1057) 在 javax.faces.component.UIComponentBase.queueEvent(UIComponentBase.java:1057) 在 javax.faces.component.UIComponentBase.queueEvent(UIComponentBase.java:1057) 在 javax.faces.component.UIInput.validate(UIInput.java:992) 在 javax.faces.component.UIInput.executeValidate(UIInput.java:1249) 在 javax.faces.component.UIInput.processValidators(UIInput.java:712) 在 javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1261) 在 org.primefaces.component.inplace.Inplace.processValidators(Inplace.java:218) 在 org.primefaces.component.api.UITree.processColumnChildren(UITree.java:442) 在 org.primefaces.component.api.UITree.processNode(UITree.java:372) 在 org.primefaces.component.api.UITree.processNode(UITree.java:380) 在 org.primefaces.component.api.UITree.processNodes(UITree.java:365) 在 org.primefaces.component.api.UITree.processValidators(UITree.java:308) 在 org.primefaces.component.tree.Tree.processValidators(Tree.java:377) 在 com.sun.faces.context.PartialViewContextImpl$PhaseAwareVisitCallback.visit(PartialViewContextImpl.java:552) 在 com.sun.faces.component.visit.PartialVisitContext.invokeVisitCallback(PartialVisitContext.java:183) 在 org.primefaces.component.api.UITree.visitTree(UITree.java:552) 在 javax.faces.component.UIComponent.visitTree(UIComponent.java:1700) 在 javax.faces.component.UIComponent.visitTree(UIComponent.java:1700) 在 javax.faces.component.UIForm.visitTree(UIForm.java:371) 在 javax.faces.component.UIComponent.visitTree(UIComponent.java:1700) 在 javax.faces.component.UIComponent.visitTree(UIComponent.java:1700) 在 com.sun.faces.context.PartialViewContextImpl.processComponents(PartialViewContextImpl.java:399) 在 com.sun.faces.context.PartialViewContextImpl.processPartial(PartialViewContextImpl.java:263) ... 28

【问题讨论】:

    标签: ajax primefaces drag-and-drop tree tomcat7


    【解决方案1】:

    适用于 Mojarra 2.0.3 (FCS b03)、PrimeFaces 4.0。

    请告诉我们您使用的版本的更多信息,并提供支持 bean 的 onDragDrop 方法的确切代码。我猜这与您的方法没有使用正确的参数类型有关(TreeDragDropEvent 是预期的,而不是 ValueChangeEvent)。

    应该是这样的:

    public void onDragDrop(TreeDragDropEvent event) { 
      ...
    }
    

    【讨论】:

    • 我有完全相同的 onDragDrop 方法和相同的参数。即使我不使用 也会引发此异常,因此不应调用方法。 PrimeFaces 4、Tomcat 7、JSF 2.2、Weld 2.0.4
    • 您的树包含输入:PF 4.0.5 中修复的可能的 PF 问题 6380,请参阅 code.google.com/p/primefaces/issues/detail?id=6380
    • 似乎合法 :) 我尝试更新并让您发布。到目前为止谢谢你;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-15
    相关资源
    最近更新 更多