由于Fieldset无法转换为UIData而抛出异常

时间:2015-04-21 10:39:11

标签: jsf jsf-2 primefaces drag-and-drop

尝试开发拖放功能。必须拖动布局中的fieldSet并模仿用户,就好像它被放入另一个布局一样。下面是相同的xhtml代码: -

<h:head>
    <script type="text/javascript">
        function handleDrop(event, ui) {
            var dropped = ui.draggable;

            dropped.fadeOut('fast');
        }
    </script>

</h:head>
<h:body>
 <h:form>
    HI
    <h1>Primefaces Basic Config</h1>


    <p:layout style="min-width:400px;min-height:200px;">

        <p:layoutUnit id="first" position="west">

            <p:fieldset id="ppl" legend="Builder" toggleable="true" toggleSpeed="500" style="width:300px">

                    <h:panelGrid columns="2" cellpadding="5">
                        <h:outputText value="Bla bla bla"></h:outputText>
                    </h:panelGrid>

            </p:fieldset>

            <p:draggable for="ppl" revert="true" />

        </p:layoutUnit>


        <p:layoutUnit id="second" position="center">

                 <p:tabView id="dropdownpanel">
                    <p:tab title="Edit">
                        <h:panelGrid columns="2" cellpadding="10">
                            <h:outputText
                                value="Add question details" />
                        </h:panelGrid>
                    </p:tab>
                    <p:tab title="Option">
                        <h:panelGrid columns="2" cellpadding="10">
                            <h:outputText value="addtional options required" />
                        </h:panelGrid>
                    </p:tab>
                    <p:tab title="Logic">
                        <h:panelGrid columns="2" cellpadding="10">
                            <h:outputText value="addd logic to this tab" />
                        </h:panelGrid>
                    </p:tab>
                 </p:tabView>

        </p:layoutUnit>

        <p:droppable for="second" tolerance="touch"  datasource="ppl" onDrop="handleDrop" >
            <p:ajax update="first second" />  
        </p:droppable>

    </p:layout>

  </h:form>
</h:body>

          </h:form>

以下是我想要实现的内容的屏幕截图,其中构建器字段集可以拖动到编辑区域: -

enter image description here

但是当我试图拖动BUILDER时,抛出以下异常: -

  

15:53:05,497 INFO   [javax.enterprise.resource.webcontainer.jsf.context]   (http-0.0.0.0-0.0.0.0-8081-1)java.lang.ClassCastException:   org.primefaces.component.fieldset.Fieldset无法强制转换为   javax.faces.component.UIData:java.lang.ClassCastException:   org.primefaces.component.fieldset.Fieldset无法强制转换为   javax.faces.component.UIData at   org.primefaces.component.dnd.Droppable.findDatasource(Droppable.java:231)   [primefaces-4.0.jar:4.0] at   org.primefaces.component.dnd.Droppable.queueEvent(Droppable.java:189)   [primefaces-4.0.jar:4.0] at   org.primefaces.component.behavior.ajax.AjaxBehaviorRenderer.decode(AjaxBehaviorRenderer.java:44)   [primefaces-4.0.jar:4.0] at   javax.faces.component.behavior.ClientBehaviorBase.decode(ClientBehaviorBase.java:132)   [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final] at   org.primefaces.renderkit.CoreRenderer.decodeBehaviors(CoreRenderer.java:395)   [primefaces-4.0.jar:4.0] at   org.primefaces.component.dnd.DroppableRenderer.decode(DroppableRenderer.java:32)   [primefaces-4.0.jar:4.0] at   javax.faces.component.UIComponentBase.decode(UIComponentBase.java:787)   [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final] at   javax.faces.component.UIComponentBase.processDecodes(UIComponentBase.java:1181)   [JBoss的-JSF的api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]

我无法解决问题。

1 个答案:

答案 0 :(得分:1)

datasource元素中的p:droppable属性需要引用UIData。 Fieldset不是UIData。如果查看UIData Javadoc,您会看到HtmlDatatable是一个已知的子类

我遇到了同样的问题,并通过引用我的datatable代替fieldset来解决问题。在您的情况下,您使用的是h:panelGrid,因此请更改

   <h:panelGrid columns="2" cellpadding="5" >

到数据表,给它一个ID。说&#34; datasrc1&#34;。 并将您的dropable的数据源更改为:

   <p:droppable for="second" tolerance="touch"  datasource="datasrc1" onDrop="handleDrop" >