Exception that since Fieldset cannot be passed to UIData
Trying to develop drag and drop functionality. The fieldSet fields in the layout need to be dragged around and simulate the user as if they were dropped into another layout. Below is the xhtml code for it: -
<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>
Below is a screenshot of what I am trying to achieve when the field builder style can be dragged into the edit box: -
But when I try to drag BUILDER then after running Exception: -
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 not can be dropped javax.faces.component.UIData: java.lang.ClassCastException: org.primefaces.component.fieldset.Fieldset can not be dropped 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] in javax.faces.component.behavior.ClientBehaviorBase.decode (ClientBehaviorBase.javass:132) -2.0.1.Final.jar: 2.0.1.Final] in org.primefaces.renderkit.CoreRenderer.decodeBehaviors (CoreRenderer.java:395) [primefaces-4.0.jar: 4.0] in org.primefaces.component.dnd.DroppableRenderer.decode (DroppableRenderer.java:32) [primefaces-4.0.jar: 4.0] in 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]0.1.Final.jar: 2.0.1.Final]0.1.Final.jar: 2.0.1.Final]
And I have no clue for a solution.
source to share
The attribute datasource
on the element p:droppable
must refer to UIData. Fieldset is not a UIData. If you look at the UIData Javadoc you can see that HtmlDatatable is a well-known subclass
I had the same problem and resolved by referencing mine datatable
instead fieldset
. In your case, you are using h:panelGrid
, so change
<h:panelGrid columns="2" cellpadding="5" >
for data, give it an id. Say "datasrc1". And change your droppable datasource to:
<p:droppable for="second" tolerance="touch" datasource="datasrc1" onDrop="handleDrop" >
source to share