Pessoal não sei ao certo se servirá para vocês mais fiz um código e acho que pode ajudar algumas pessoas que estão com dificuldades do drag drop no primefaces! Peguem o que vocês quiserem e se acharem que da pra melhorar por favor coloquem ai! Abraços
Aqui o .xhtml
<h:body>
<h:form onmouseover="carregar();" id="form">
<p:dataTable rowKey="teste" var="dado" rendered="true" editable="true" emptyMessage="Sem resultados."
filterEvent="enter" value="#{AplicacaoMBean.model}"
id="dTableDados">
<p:column headerText="Ano" sortBy="#{dado.ano}" style="width:50px;text-align:center;"
id="colunaDadosAno">
<h:outputText value="#{dado.ano}" id="labelDadosAno" />
</p:column>
<p:column headerText="Cor" sortBy="#{dado.cor}" style="width:50px;text-align:center;"
id="colunaDadosCor">
<h:outputText value="#{dado.cor}" id="labelDadosCor" />
</p:column>
<p:column headerText="Modelo" sortBy="#{dado.modelo}" style="width:50px;text-align:center;"
id="colunaDadosModelo">
<h:outputText value="#{dado.modelo}" id="labelDadosModelo" />
</p:column>
</p:dataTable>
<p:tree id="tree" value="#{AplicacaoMBean.root}" var="node">
<p:treeNode>
<p:droppable tolerance="pointer" for="no" >
<p:ajax update="tree" event="drop" listener="#{AplicacaoMBean.colocarNo}"/>
<h:outputText id="no" value="#{node}"/>
</p:droppable>
</p:treeNode>
</p:tree>
<p:commandButton update="@form" actionListener="#{AplicacaoMBean.limparTabelas}" value="Limpar Tabelas"/>
</h:form>
<script>
function carregar() {
$(document).ready(function() {
//this will hold reference to the tr we have dragged and its helper
var c = {};
$("#form\\:dTableDados tbody tr").draggable({
helper: "clone",
start: function(event, ui) {
c.tr = this;
c.helper = ui.helper;
}
});
});
$(function() {
$("#form\\:dTableDados tbody tr").draggable(
{cursor: "move", cursorAt: {top: 10, left: 120}}
);
});
$(function() {
$('#form\\:dTableDados tbody tr').each(function(index, element)
{
$(element).attr('id', 'dTableDados:' + index + ':tr');
});
});
}
</script>
</h:body>
Aqui o MBean
import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.model.ListDataModel;
import org.primefaces.event.DragDropEvent;
import org.primefaces.model.DefaultTreeNode;
import org.primefaces.model.TreeNode;
@ManagedBean(name = "AplicacaoMBean")
@SessionScoped
public class AplicacaoMBean {
private ListDataModel model;
private TreeNode root;
/**
* Creates a new instance of AplicacaoMBean
*/
public AplicacaoMBean() {
limparTabelas();
}
public ListDataModel getModel() {
return model;
}
public void colocarNo(DragDropEvent dropEvent) {
String idDrop = dropEvent.getDropId();
String idDrag = dropEvent.getDragId();
TreeNode drop = carregaNode(root, idDrop);
Integer contadorLista = 0;
Integer idEvento = Integer.parseInt(limpaDragDropId(idDrag, ":"));
String nomeDrop = "";
String corDrop = "";
String miliDrop = "";
for (Object e : model) {
if (idEvento == contadorLista) {
nomeDrop = ((Carro) e).getModelo();
corDrop = ((Carro) e).getCor();
miliDrop = String.valueOf(System.currentTimeMillis());
break;
}
contadorLista++;
}
new DefaultTreeNode(nomeDrop + " - " + corDrop + " = " + miliDrop, drop);
}
/**
* Metodo para limpar os textos do componente DRAG & DROP
*
* @param idDragDrop id componente
* @return string limpa somente numeros, caso tree separados por _
*/
public static String limpaDragDropId(String idDragDrop, String separador) {
String retorno = "";
String[] arrayDragDrop = idDragDrop.split(separador);
for (String string : arrayDragDrop) {
String[] arrayRetorno = string.split("_");
for (String string1 : arrayRetorno) {
if (validaStringNumero(string1)) {
if (retorno.length() > 0) {
retorno += "_" + string1;
} else {
retorno = string1;
}
}
}
}
return retorno;
}
public static boolean validaStringNumero(String s) {
return s.matches("[0-9]*");
}
private TreeNode carregaNode(TreeNode treeNode, String idEvento) {
idEvento = limpaDragDropId(idEvento, ":");
String[] splitIdEvento = idEvento.split("_");
for (Integer i = 0; i < splitIdEvento.length; i++) {
treeNode = treeNode.getChildren().get(Integer.parseInt(splitIdEvento[i]));
}
return treeNode;
}
public void setModel(ListDataModel model) {
this.model = model;
}
public TreeNode getRoot() {
return root;
}
public void setRoot(TreeNode root) {
this.root = root;
}
public void limparTabelas() {
List<Carro> carros = new ArrayList<Carro>();
carros.add(new Carro("1987", "Verde", "Gol"));
carros.add(new Carro("2000", "Azul", "Palio"));
carros.add(new Carro("2008", "Amarelo", "Uno"));
model = new ListDataModel(carros);
root = new DefaultTreeNode("root", null);
TreeNode Estoque = new DefaultTreeNode("Estoque", root);
TreeNode Vendido = new DefaultTreeNode("Vendido", root);
TreeNode Defeito = new DefaultTreeNode("Defeito", root);
}
}
Aqui a classe Carro
package br.com.objetos;
public class Carro {
private String cor;
private String ano;
private String modelo;
public Carro(String ano, String cor, String modelo) {
this.ano = ano;
this.cor = cor;
this.modelo = modelo;
}
public String getCor() {
return cor;
}
public void setCor(String cor) {
this.cor = cor;
}
public String getAno() {
return ano;
}
public void setAno(String ano) {
this.ano = ano;
}
public String getModelo() {
return modelo;
}
public void setModelo(String modelo) {
this.modelo = modelo;
}
}
É isso ai Abraços