尝试开发拖放功能。必须拖动布局中的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>
以下是我想要实现的内容的屏幕截图,其中构建器字段集可以拖动到编辑区域: -
但是当我试图拖动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]
我无法解决问题。
答案 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" >