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

标签 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 cannot be cast to javax.faces.component.UIData: java.lang.ClassCastException: org.primefaces.component.fieldset.Fieldset cannot be cast to 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]

而且我没有解决的线索。

最佳答案

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

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

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

给一个数据表,给它一个ID。说“datasrc1”。 并将您的 droppable 的数据源更改为:

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

关于jsf - 由于 Fieldset 无法转换为 UIData 而抛出的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29769842/

相关文章:

java - a4j 中未触发操作 :commandlink

file-upload - Primefaces 文件上传 allowTypes

jsf - 非渲染 p :dataTable ends up in pe:exporter PDF

jquery - 单击 PrimeFaces 中的单选按钮

jsf - Apache Myfaces 在使用 h :dataTable and an empty dataset 时打印空白的 td 标签

jsf - 如何使用 h :commandLink? 在新窗口而不是选项卡中打开页面

java - 如何获取 <p :dataTable primefaces? 中的选定单元格

JSF 2.0 : Why does a JSF bean get created when it's used in a component that is not rendered?

java - 没有 faces-config 的 JSF 2.0 国际化

jsf - 如何在 primefaces 中通过 javascript 触发组件刷新?