RichFaces - DragSupport e DropSupport - Exemplo funcional

0 respostas
J

Boa noite,

Gostaria de postar um exemplo funcional, inspirado do http://livedemo.exadel.com, onde utilizo rich:dragSupport e rich:dropSupport, ou seja, arrastando componentes de um panel para outro.
Quem não conhece pode ajudar e todos, criticar. :slight_smile:

Uso:
Versão do produto: NetBeans IDE 6.8 (Build 200912041610)
Java: 1.6.0_07; Java HotSpot™ Client VM 10.0-b23
Sistema: Windows Vista versão 6.0 executando em x86; Cp1252; pt_BR (nb)
Apache Tomcat 6.0.20

Arquivo: drop.jsp (uso: *.jsf no web.xml)

<%@page contentType="text/html" pageEncoding="windows-1252"%>

<%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%>
<%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%>
<%@taglib prefix="rich" uri="http://richfaces.org/rich" %>
<%@taglib prefix="a4j" uri="http://richfaces.org/a4j"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<f:view>
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=windows-1252"/>
            <title>JSP Page</title>
        </head>
        <body>
            <rich:dragIndicator id="indicator" />

            <h:form id="form">
                <h:panelGrid columns="2" id="panelGlobal">
                    <rich:panel style="width:400px">
                        <f:facet name="header">
                            <h:outputText value="Usuários"/>
                        </f:facet>
                        <rich:dataTable id="src" value="#{usuariosDragBean.usuariosDragList}" var="usuarios" width="300px"
                                        columns="2">
                            <rich:column sortBy="#{usuarios.nomeUsuario}">
                                <f:facet name="header">
                                    <h:outputText value="Nome"/>
                                </f:facet>                                
                                <rich:dragSupport dragIndicator=":indicator" dragType="usuarios"
                                                  dragValue="#{usuarios}" 
                                                  dragListener="#{usuariosDragBean.processDrag}"
                                                  reRender="src, droped">
                                        <rich:dndParam name="label" value="#{usuarios.nomeUsuario}" />                                        
                                </rich:dragSupport>
                                <h:outputText value="#{usuarios.nomeUsuario}"/>                                
                            </rich:column>
                        <rich:column>
                            <f:facet name="header">
                                <h:outputText value="CPF"/>
                            </f:facet>                                                            
                            <h:outputText value="#{usuarios.cpfUsuario}"/>
                        </rich:column>
                        </rich:dataTable>
                        <rich:column>
                            <rich:panel>
                                <f:facet name="header">
                                    <h:outputText value="Zona Drop"/>
                                </f:facet>                                
                                <rich:dropSupport id="usuariosDrop" acceptedTypes="usuarios" 
                                                  typeMapping="{usuarios:text_for_accepting}"
                                                  reRender="src">
                                    <rich:dndParam name="text_for_accepting" value=">>>"/>
                                </rich:dropSupport>
                                <rich:dataTable id="droped" value="#{usuariosDragBean.usuariosDropList}" var="usuariosDrop"
                                                width="300px" columns="2" >
                                    <rich:column sortBy="#{usuariosDrop.nomeUsuario}">
                                        <f:facet name="header">
                                            <h:outputText value="Nome"/>
                                        </f:facet>
                                        <h:outputText value="#{usuariosDrop.nomeUsuario}"/>
                                    </rich:column>
                                    <rich:column>
                                        <f:facet name="header">
                                            <h:outputText value="CPF"/>
                                        </f:facet>
                                        <h:outputText value="#{usuariosDrop.cpfUsuario}"/>
                                    </rich:column>
                                    <f:facet name="footer">
                                        <a4j:commandButton action="#{usuariosDragBean.reset}" value="Reset"
                                               reRender="src, droped"/>
                                    </f:facet>
                                </rich:dataTable>
                            </rich:panel>
                        </rich:column>
                    </rich:panel>
                </h:panelGrid>
            </h:form>
        </body>
    </html>
</f:view>

Classe: UsuariosDrag.java

package org.drag;
public class UsuariosDrag {
    private String cpfUsuario;
    private String nomeUsuario;

    public UsuariosDrag() {}

    public UsuariosDrag(String cpfUsuario, String nomeUsuario) {
        this.cpfUsuario = cpfUsuario;
        this.nomeUsuario = nomeUsuario;
    }
    //Getters e setters omitidos    
}

Classe: UsuariosDragBean.java

package org.drag;
import java.util.ArrayList;
import java.util.List;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;
import org.richfaces.event.DragEvent;
import org.richfaces.event.DropEvent;

public class UsuariosDragBean implements org.richfaces.event.DragListener, org.richfaces.event.DropListener {
    private List<UsuariosDrag> usuariosDragList = new ArrayList<UsuariosDrag>();
    private List<UsuariosDrag> usuariosDropList = new ArrayList<UsuariosDrag>(); 
    //private DataModel dataModelUsuariosDrag;

    public void processDrop(DropEvent de) {
        throw new UnsupportedOperationException("Nesse exemplo não implementado");
    }

    public void processDrag(DragEvent de) {
        UsuariosDrag usuarios = (UsuariosDrag)de.getDragValue();        
        this.usuariosDropList.add(usuarios);
        this.usuariosDragList.remove(usuarios);
    }

    public void reset() {
        this.usuariosDropList.clear();
        this.usuariosDragList.clear();
        inicialize();
    }

    public void inicialize() {
        UsuariosDrag uDrag = new UsuariosDrag("[telefone removido]", "James Bond");
        this.usuariosDragList.add(uDrag);
        uDrag = new UsuariosDrag("[telefone removido]", "Bruce Wayne");
        this.usuariosDragList.add(uDrag);
        uDrag = new UsuariosDrag("[telefone removido]", "Bach");
        this.usuariosDragList.add(uDrag);
    }
 
    public UsuariosDragBean() {
        this.inicialize();
        //Usei lista para facilitar, pode ser tranquilamente de um banco.
    }

    //Getters e setters omitidos    
}

Lembrando de inserir no faces-config.xml

<managed-bean>
        <managed-bean-name>usuariosDragBean</managed-bean-name>
        <managed-bean-class>org.drag.UsuariosDragBean</managed-bean-class>
        <managed-bean-scope>session</managed-bean-scope>
    </managed-bean>

Não sou exatamente um expert do fórum, mas espero ter ajudado.
Se alguém fizer alguma pergunta para mim não sei quando poderei responder, estou no meio do nada e amanhã tem trabalho.

Abraços,
James

Criado 11 de janeiro de 2010
Respostas 0
Participantes 1