Páginas

Mostrando entradas con la etiqueta GWT. Mostrar todas las entradas
Mostrando entradas con la etiqueta GWT. Mostrar todas las entradas

13 de febrero de 2014

cargar la información cuando selecciona el tab


para cargar la información cuando esta la pestaña seleccionada


display.getTabItem().addListener(Events.Select, new Listener(){

@Override
public void handleEvent(BaseEvent be) {

Tools.loadingContainerSetVisible(true);
cargar();
}

});

cambia de color la fila en grid


/**
* Función que cambia de color la fila
*
*/
public class GVC extends GridViewConfig{
@Override
        public String getRowStyle(ModelData model, int rowIndex, ListStore ds){

    if (rowIndex%2==0){
    return "coloreador-grid-row-impar";
    }
    else
            return "";
    }
        
    }

GridView view = new GridView(); 
view.setViewConfig(new GVC());

grid.setView(view);

presenter

this.display.getGrid().getView().setViewConfig(new GridViewConfig() {
@Override
public String getRowStyle(ModelData model, int rowIndex,
ListStore ds) {
if (model != null) {

if (model.get("id") == null){
return "coloreador-grid-row-nuevo";
}
else{
if (model.get("colorea") != null && (Boolean) model.get("colorea")) {
return "coloreador-grid-row-borrado";
} else {
return "coloreador-grid-row-sincolor";
}
}

}
return "";
}

});


en  css 

.coloreador-grid-row-sincolor {
background-color: #FFFFFF !important;
}

31 de agosto de 2013

descarga de ficheros desde aplicación con GWT


Os comento a continuación una forma de detectar la descarga de ficheros desde aplicación.

Este método es compatible con todos los navegadores empleando JQuery 1.x y un par de extensiones del mismo: BlockUI y Cookie. La idea se basa en generar un token de descarga que se escribe en una cookie una vez el fichero ha sido descargado: la aplicación queda a la espera de este token leyendo las cookies cada cierto tiempo.

La implementación es sencilla:

1. Preparar para la descarga de ficheros un iframe vacío en la página index (o la que se emplee como montaje de la aplicación):


"<"iframe src="javascript:''" id="__gwt_downloadFrame" tabIndex='-1'
        style="position: absolute; width: 0; height: 0; border: 0"">""<"/iframe">"


2. Llamar a fichero a descargar. Llamamos a un servlet que genera el documento indicando un token que en el fondo es un UID o número aleatorio:
"
String UID = Math.random()*1000*Math.random()*10000;
String url = GWT.getHostPageBaseURL() + "/tools/XXXXXXXX" + "&UID=" + UID;
iniciarProcesoCheckDownload (UID);
DOM.setElementAttribute(RootPanel.get("__gwt_downloadFrame").getElement(),"src", url); 
"
Donde se invoca una función javascript antes de la descarga para comunicar el token (UID):
"
public static native void iniciarProcesoCheckDownload(String token) /*-{
    $wnd.programarEscuchaFichero (token);
}-*/;
"
3. En este proceso estamos llamando a una función de Javascript que realiza el bloqueo de la pantalla y la espera de lectura de cookie, donde hemos incluido un control por tiempo como mecanismo de control. Este código requiere de las librerías JS de JQuery:

"<"script src="js/jquery-1.10.2.min.js" ">""<"/script">"
"<"script src="js/jquery.cookie.js">"<"/script">"
"<"script src="js/jquery.blockUI.js"">""<"/script">"
"
var fileDownloadCheckTimer;
var downloadToken;
var startTime;

function ocultarDivDescarga() {
    $.unblockUI();
    window.clearInterval(fileDownloadCheckTimer);
    window.status = '';
}

function programarEscuchaFichero(token) {
    
    downloadToken = token;
    $.blockUI({baseZ: 3000, message: '"<"h1">"Espere mientras se prepara la descarga ... "<"br/">""<"br/">" "<"img src="custom/LoadingProgressBar.gif" border="0" width="100"/">" "<"/h1">"' });
    startTime = new Date();
    
    fileDownloadCheckTimer = window.setInterval(function () {
      var cookieValue = $.cookie('FileCookie');
      if (cookieValue == downloadToken) {
          ocultarDivDescarga();
      }
      else {
          var endTime = new Date();
          var secondsOpen = Math.floor((endTime - startTime) / 1000);
          if (secondsOpen> 60*2) { // 2 minutos
              // Salimos por tiempo, medida de seguridad
              ocultarDivDescarga();
                window.alert ('La descarga no se completó en el tiempo esperado, por favor verifique si ha obtenido el fichero solicitado o inténtelo de nuevo.');
          }
          else
          {
              window.status = 'Espere mientras se prepara la descarga ... ('+secondsOpen + ' segundos )';
          }
      }
    }, 1000);
  }
"

4. En la parte servidora, solo tenemos que recoger el token de la petición:

String token = request.getParameter("UID");

5. Y al descargar el fichero incluir una cookie con el token, para que el cliente (navegador web) salga de la espera cuando la lea. Hay que poner la ruta raiz así como un tiempo de expiración no demasiado bajo (problemas con diferencia de hora con servidor, zona horaria, etc.):

// indicar token para control de descarga:
Cookie thecookie = new Cookie("FileCookie", token);
thecookie.setMaxAge(60 * 60 * 4); // 4 horas de vida TOPS
thecookie.setPath("/");
response.addCookie(thecookie);

// Escribir binario en salida
response.setContentType ("application/xls");
response.setHeader ("Content-Disposition", "attachment;filename=" + sArchivo);
OutputStream ostSalida = response.getOutputStream();
"["..."]"


La fuente original de la solución es la siguiente: 

http://geekswithblogs.net/GruffCode/archive/2010/10/28/detecting-the-file-download-dialog-in-the-browser.aspx

3 de julio de 2013

borrar handlers de las ventanas

((ToolButton)display.getWindow().getHeader().getTool(this.display.getWindow().getHeader().getTools().size()-1)).addSelectionListener(new SelectionListener() {
@Override
public void componentSelected(IconButtonEvent ce) {
for (HandlerRegistration hr: registeredHandlers) {
hr.removeHandler();
}
}
}));

19 de febrero de 2013

combo box búsqueda



el combo busca en la base con lo que hayas escrito

en la vista 

cmbxEmpresa = new ComboBox();
cmbxEmpresa.setFieldLabel(constants.tit_empresa());
cmbxEmpresa.setStore(new ListStore());
cmbxEmpresa.setValueField("id");
cmbxEmpresa.setDisplayField("no_empresa");
cmbxEmpresa.setTriggerAction(TriggerAction.ALL);


@Override
public void setDataComboEmpresas(ArrayList data) {
if (data==null) {
this.cmbxEmpresa.getStore().removeAll();
this.cmbxEmpresa.collapse();
return;
}
BeanModelFactory factory = BeanModelLookup.get().getFactory(Empresas.class);
ArrayList dataToShow = new ArrayList();
for (Empresas e:data){
BeanModel model = factory.createModel(e);
dataToShow.add(model);
}
this.cmbxEmpresa.getStore().removeAll();
this.cmbxEmpresa.getStore().add(dataToShow);
}


en el presenter 


en el bind

display.getComboEmpresa().addKeyListener(new KeyListener() {
@Override
            public void componentKeyUp(ComponentEvent ce) {
switch (ce.getKeyCode()) {
                case KeyCodes.KEY_DOWN:
                case KeyCodes.KEY_END:
                case KeyCodes.KEY_ENTER:
                case KeyCodes.KEY_ESCAPE:
                case KeyCodes.KEY_HOME:
                case KeyCodes.KEY_LEFT:
                case KeyCodes.KEY_PAGEDOWN:
                case KeyCodes.KEY_PAGEUP:
                case KeyCodes.KEY_RIGHT:
                case KeyCodes.KEY_TAB:
                case KeyCodes.KEY_UP:
                    return;
                default:
                
                 final String newValue = display.getComboEmpresa().getRawValue();

                     if (newValue != null && newValue.length() > ApplicationTypeID.MINIMUM_CHARACTERS_TYPED) {
                     
                     //oldValue = newValue;

                         DelayedTask delayedTask = new DelayedTask(new Listener() {

                            final String oldValueEvento = newValue;
                         
                         
                             @Override
                             public void handleEvent(BaseEvent be) {

                                 String valueNew = display.getComboEmpresa().getRawValue();

                                // Info.display("Buscando empresa", " OLDVALUE = " + oldValue + ", Newvalue=" + valueNew + ", Evento Value = " + oldValueEvento);
                                 
                                 if (oldValueEvento != null && oldValueEvento.equals(valueNew)) {
                                 
                                // buscarEmpresasCombo(valueNew, null);
                                 String strinLimpio = valueNew;
                                 if (ApplicationTypeID.PORCENTAJE.equals(valueNew)){
                                 strinLimpio = "";
                                 }else{
                                 
                                if (ApplicationTypeID.PORCENTAJE.equals(valueNew.substring(valueNew.length()-1,valueNew.length()))){
                                  strinLimpio = valueNew.substring(0,valueNew.length()-1);
                                }
                                 }
                                 
                                 
                                 //System.out.println(strinLimpio);
                                 Empresas empresa = new Empresas();
                                 empresa.setNo_contacto(strinLimpio);
                                 buscarEmpresasCombo(empresa);
                                 }
                             }
                         });
                         delayedTask.delay(ApplicationTypeID.DELAY_CHARACTERS_TYPED);
                     }
                     else if (newValue == null || newValue.length()==0) {
                     display.setDataComboEmpresas(null);
                     }
             
                
                
}
}
});


llamada al sevlets con otro pantalla



llamada del código descarga en gwt
             
              String url = "/no_proyecto/upload?accion=descargar&id=" + model.get("id") + "&id_documento=" + model.get("id_documento") + "&no_documento=" + model.get("no_documento")  + "&cl_usuariocrea=" + model.get("cl_usuariocrea") + "&no_fichero=" + model.get("no_fichero") ;
             
              boolean frameExists = (RootPanel.get("Descarga") != null); 
              if(frameExists) { 
              Widget widgetFrame = (Widget)RootPanel.get("Descarga"); 
              widgetFrame.removeFromParent(); 
              } 

              NamedFrame frame = new NamedFrame("Descarga"); 
              frame.setUrl(GWT.getModuleBaseURL().substring(0, GWT.getModuleBaseURL().indexOf("/nombre_proyecto")) 
              + url); 
              frame.setVisible(false); 

              RootPanel.get().add(frame); 
           

llamada del código descarga en gwt 
              /**
              // Abrir un HTTP
              Element e = DOM.createIFrame();
              e.setAttribute("src", url);
             
             
              // Abrir ventana de descarga
              Window.open(url, "Descarga",
                      "menubar=yes," + 
                      "location=false," + 
                      "resizable=yes," + 
                      "scrollbars=yes," + 
                      "status=no," + 
                      "dependent=true");
                  

18 de febrero de 2013

llamadas a un servlet desde gwt



hacer la clase del servlet 


@WebServlet(name = "nombre_servlet", urlPatterns = {"/nombre_proyecto/nombre_servlet"})
public class no_clase_servlet  extends HttpServlet  {

// variable serializable 


//aquie va la chicha
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
          throws ServletException, IOException {
      doPost(req, resp);
    }


@Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
 
String id = request.getParameter("id");
String salida = "";
Typo_variable variable = new Typo_variable();
  nota = (Typo_variable)request.getAttribute("id_varible");



}

}//fin de la clase



llamada a un servlet desde gwt


 String url = GWT.getModuleBaseURL() + "nombre_servlet?id="+id+"& id_varible ="+ variable;
RequestBuilder rq = new RequestBuilder(RequestBuilder.POST,url);
rq.setHeader("Content-Type","multipart/form-data");
rq.setHeader("Access-Control-Allow-Origin", "*");
try {
rq.sendRequest(null, new RequestCallback() {

@Override
public void onError(Request arg0, Throwable arg1) {
// TODO Auto-generated method stub
}

@Override
public void onResponseReceived(Request arg0, Response arg1) {
//Info.display("","exito "+arg0.toString());
//Info.display("","exito "+arg1.getText());
String sCoSiniestro = "";
//System.out.println(arg1.getStatusCode());
try {
sCoSiniestro = new String(arg1.getText().getBytes("ISO-8859-1"));
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//System.out.println("text "+arg1.getText());
//System.out.println("text "+arg1.getStatusText());
//System.out.println("text "+arg1.getHeadersAsString());
//System.out.println("string "+arg1.toString());
str_imprimir = sCoSiniestro;
//display.setData(sCoSiniestro);

}
});
} catch (RequestException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

llamada para una descarga de documentos


com.google.gwt.user.client.Window.open(GWT.getModuleBaseURL() + "nombre_servlet?tipoInforme=19", null, null );

otra menera

String cadena = GWT.getModuleBaseURL() + "nombre_servlet?id="+id+"& id_varible ="+ variable;
com.google.gwt.user.client.Window.open(cadena, 
                        "_blank", "");

imprimir en GWT


en el evento del boton para imprimir


Element nodoiFrame = display.getDetalle().getElement().getChild(1).getChild(0).getChild(0).getChild(0).getParentElement();
//nodoiFrame.getFirstChildElement().setId("imprimir");
it(nodoiFrame.getFirstChildElement());


buscando el compone iframe donde esta el conetado de lo que queremos imprimir

// display.getDetalle().getElement().getChild(1).getChild(0).getChild(0).getChild(0).getChild(0).getParentElement().setId("imprimir");
Element nodoiFrame = display.getDetalle().getElement().getChild(1).getChild(0).getChild(0).getChild(0).getParentElement();
nodoiFrame.getFirstChildElement().setId("imprimir");


el codigo que hace imprimir

public static native void it() /*-{ 
        $wnd.print();
    }-*/;

    public static native void it(String html) /*-{
        var frame = $doc.getElementById('imprimir');
        if (!frame) {
            $wnd.alert("Error: Can't find printing frame."); 
            return;
        }
        frame = frame.contentWindow;
        var doc = frame.document;
        doc.open();
        doc.write(html);
        doc.close();
        frame.focus();
        frame.print();
    }-*/;

    public static void it(UIObject obj) {
        it("", obj.getElement().toString());
    }

    public static void it(Element element) {
      it("", element.toString());
    }
   

    public static void it(String style, String it) {
        it("
"+style+"
"+it+""); 
    }

    public static void it(String style, UIObject obj) {
        it(style, obj.getElement().toString());
    }

    public static void it(String style, Element element) {
        it(style, element.toString ());
    }

29 de enero de 2013

Subida archivos con FileUploadField de GXT

- Configuración FormPanel:

        FormPanel fp = new FormPanel();
        fp.setEncoding(Encoding.MULTIPART);
        fp.setMethod(Method.POST);
        fp.setAction("uploadServlet"); // Path del servlet de subida

- Configuración FileUploadField:

        FileUploadField flupldFld = new FileUploadField();
        flupldFld.setName("file");

- Añadir el FileUploadField al FormPanel:

       fp.add(flupldFld, new FormData("100%"));

- Configuración Button:

      myButton.addSelectionListener(new SelectionListener() {

            @Override
            public void componentSelected(ButtonEvent ce) {
               
                if (display.getFlupldFld().getValue() != null) {
                    fp.submit();
                }
            }
        });

- Añadir listener de respuesta de la subida al FormPanel

      fp.addListener(Events.Submit, new Listener () {

            @Override
            public void handleEvent(final FormEvent be) {

                Log.info("[be.getResultHtml()] = " + be.getResultHtml());
                }
            }
        });

- Creas un servlet y con este código tendrás el archivo (necesitarás la librería de apache commons-fileupload)

      FileItemFactory factory = new DiskFileItemFactory();
      ServletFileUpload upload = new ServletFileUpload(factory);
      List items = (List) upload.parseRequest(request);

- También en el servlet puedes escribir algo en su salida para que lo puedas recibir en el 'be.getResultHtml()' del listener que le pusiste al FormPanel.

      response.getOutputStream().print("Fichero subido correctamente");

creacion de properties en un proyecto gwt




se crea una clase la nombre -> ConfigsGetter

//es la localizacion donde esta nuestro archivo de propertis

private static final String BUNDLE_NAME = "/res/config/file.properties";

public ConfigsGetter() {
}
public static String getString(String key) {
try {
InputStream in = ConfigsGetter.class.getResourceAsStream(BUNDLE_NAME);
if (in == null ) {
System.out.println("Properties file: " + BUNDLE_NAME + " not found!");
return null;
}
else {
Properties pro = new Properties();
pro.loadFromXML(in);
return pro.getProperty(key);
}
} catch (Exception e) {
e.printStackTrace();
return null;
}
}

en el archivo  file.properties

key="plantilla">/res/config/fichero.xls
key="plantilla1">/res/config/fichero1.xls
key="plantilla2">/res/config/fichero2.xls
key="plantilla3">/res/config/fichero3.xls

para llamarlo 

ConfigsGetter.getString("plantilla")




Configuracion JNDI en un gassfish


1.       Crear un recurso tipo Properties en Glassfish, donde podemos poner varias propiedades (por ejemplo URL, user, passwd, ruta base, tiempo de espera, etc):

REsources > JNDI > Custom > New Custom Resource:



2.       En código java hacer el lookup del recurso:

                                                    
public static final String JNDI = "wsdl/dkv";
Properties SyncAseguradosResource = Properties.class.cast(new InitialContext().lookup(JNDI));


3.       Una vez tenemos el recurso, obtener la propiedad que necesitemos:

String sEndPointURL = SyncAseguradosResource.getProperty("DKV_EndPoint");

22 de agosto de 2012

error del glassfish al desplegar



error del glassfish

SEVERE: Class [ Lcom/ziaur/one/SaveInfoLocal; ] not found. Error while loading [ class com.ziaur.two.InfoRedaerImpl ]
SEVERE: Exception while deploying the app [Gtwo]
SEVERE: Invalid ejb jar [Gtwo]: it contains zero ejb.
Note:
1. A valid ejb jar requires at least one session, entity (1.x/2.x style), or message-driven bean.
2. EJB3+ entity beans (@Entity) are POJOs and please package them as library jar.
3. If the jar file contains valid EJBs which are annotated with EJB component level annotations (@Stateless, @Stateful, @MessageDriven, @Singleton), please check server.log to see whether the annotations were processed properly.
java.lang.IllegalArgumentException: Invalid ejb jar [Gtwo]: it contains zero ejb.
Note:
1. A valid ejb jar requires at least one session, entity (1.x/2.x style), or message-driven bean.
2. EJB3+ entity beans (@Entity) are POJOs and please package them as library jar.
3. If the jar file contains valid EJBs which are annotated with EJB component level annotations (@Stateless, @Stateful, @MessageDriven, @Singleton), please check server.log to see whether the annotations were processed properly.
at com.sun.enterprise.deployment.util.EjbBundleValidator.accept(EjbBundleValidator.java:76)
at com.sun.enterprise.deployment.util.ApplicationValidator.accept(ApplicationValidator.java:128)
at com.sun.enterprise.deployment.EjbBundleDescriptor.visit(EjbBundleDescriptor.java:730)
at com.sun.enterprise.deployment.Application.visit(Application.java:1768)
at com.sun.enterprise.deployment.archivist.ApplicationFactory.openArchive(ApplicationFactory.java:195)
at org.glassfish.javaee.core.deployment.DolProvider.load(DolProvider.java:180)
at org.glassfish.javaee.core.deployment.DolProvider.load(DolProvider.java:93)
at com.sun.enterprise.v3.server.ApplicationLifecycle.loadDeployer(ApplicationLifecycle.java:826)
at com.sun.enterprise.v3.server.ApplicationLifecycle.setupContainerInfos(ApplicationLifecycle.java:768)
at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:368)
at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:240)
at org.glassfish.deployment.admin.DeployCommand.execute(DeployCommand.java:370)
at com.sun.enterprise.v3.admin.CommandRunnerImpl$1.execute(CommandRunnerImpl.java:355)
at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:370)
at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:1067)
at com.sun.enterprise.v3.admin.CommandRunnerImpl.access$1200(CommandRunnerImpl.java:96)
at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1247)
at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1235)
at com.sun.enterprise.v3.admin.AdminAdapter.doCommand(AdminAdapter.java:465)
at com.sun.enterprise.v3.admin.AdminAdapter.service(AdminAdapter.java:222)
at com.sun.grizzly.tcp.http11.GrizzlyAdapter.service(GrizzlyAdapter.java:168)
at com.sun.enterprise.v3.server.HK2Dispatcher.dispath(HK2Dispatcher.java:117)
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:234)
at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:822)
at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:719)
at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1013)
at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:225)
at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
at java.lang.Thread.run(Thread.java:662)  



y no ecuentra 

java.lang.NoClassDefFoundError: com/foo/sdk/core/AbstractClass

este errror que tiene pinta de ser del EJB pero es de como tenemos configurados nuestro EAR

debes de mirar las propiedades del proyecto del ear. en el apartado de "Deployment Assembly" debes de introducir las librerias que no se encuentran, así como los proyectos para desplegar tu aplicacion

23 de mayo de 2012

no muestra datos en store cuando no esta vacío con scarol




conter_panel_grid.setScrollMode(Scroll.AUTOX);


en el sert data del grid deberiamos hacer un reconfigure
grid.reconfigure(gridBalance.getStore(), gridBalance.getColumnModel());
grid.getLayoutData();
conter_panel_grid.layout();

7 de febrero de 2012

idioma según el navegador [ idioma browser]



para que el idioma de la aplicación gwt sea el mismo que el del navegador debes de:

primero entrar en el archivo nombre_proyecto.gwt.xml habría que quitar las dobles comillas  < y >


 < extend-property name="locale" values="es_ES"/>

extend-property name=" locale" values="en"/>

extend-property name=" locale" values="fr"" />

< set-property-fallback name="locale" value="es_ES" />



en el archivo index.jsp

debes añadir esta linea y habría que quitar las dobles comillas  < y >
< meta name="gwt:property" content="locale=<%= request.getLocale() %/>

28 de septiembre de 2011

llamada entre dos servicios gwt


la llamada desde dos servicios

se hacer  muy simple

lo primoero se crea el objeto serviceImpl

ClassServiceImpl oSI = new ClassServiceImpl();

luego hacer las llamada al oSI.getContext() 

en esta clase te debe de devolver OjetoBeanRemote

asi podras llamar a los metos del servicio que desees

oSI.insertarBBDD();


24 de septiembre de 2011

tooltip grid cell whith messager


y en la creacion de las columnas del grid

    public static GridCellRenderer getTootipCeld(final String str) {
         GridCellRenderer renderer = new GridCellRenderer() {

            @Override
            public Object render(BaseModel model, String property,
                    ColumnData config, int rowIndex, int colIndex,
                    ListStore store, Grid grid) {
               
                Label label = new Label(""+model.get(property));
                label.setToolTip(str);
                return label;
   
            }
       
         };
       
         return renderer;
       
    }



y en la creacion de las columnas del grid

column.setRenderer(ColumnRendered.getTootipCeld("String"));


grid selected row


en la creación del grid

 grid.setSelectionModel(new GridSelectionModel());


en el presenter en la funcion bind


display.getGrid().addListener(Events.CellMouseDown, new Listener>() {


            @Override
            public void handleEvent(GridEvent be) {
               
                Objeto dec = display.getData();
                if (dec != null){
               BaseModel bd = display.getGrid().getSelectionModel().getSelectedItem();
                }else{
               
                    ApplicationMsg.getMsgError(conjuntoTipoInfosDisplay.ERROR.toString(), servicios.getMessages().error_datos());   
                }
               
            }

        });


10 de marzo de 2011

Grid with buttons

Esto en un ejemplo que viene el la pagina de sencha.com con algo mas de miga


en la parte del view debemos tener algo como esto

public void getListado(final ClickHandler handlerEdit, final ClickHandler handlerDelete,
final ConjuntoServicios servicios,
boolean bReadOnly) {

cp = new ContentPanel();

List configs = new ArrayList();


// A�adimos las columnas.
ColumnConfig clmncnfgID = new ColumnConfig("id", "Id", 100);
clmncnfgID.setHidden(true);
configs.add(clmncnfgID);


ColumnConfig clmncnfgSeccion = new ColumnConfig("id_1", servicios.getConstants().cmn_nombre(), 200);
configs.add(clmncnfgSeccion);

ColumnConfig clmncnfgCodigo = new ColumnConfig("id_2", servicios.getConstants().cmn_codigo(), 200);
configs.add(clmncnfgCodigo);

//añadimos el boton el colum render
// en este caso tenemos dos botones una de bajada y otro de subida
GridCellRenderer buttonDownRenderer = new GridCellRenderer() {
public Object render(final BaseModel model, String property, ColumnData config, final int rowIndex,
final int colIndex, ListStore store, final Grid grid) {

init = true;
grid.addListener(Events.ColumnResize, new Listener() {

public void handleEvent(GridEvent be) {

for (int i = 0; i < be.getGrid().getStore().getCount(); i++) { if (be.getGrid().getView().getWidget(i, be.getColIndex()) != null ){ // && be.getGrid().getView().getWidget(i, be.getColIndex()) instanceof BoxComponent) { //((BoxComponent) be.getGrid().getView().getWidget(i, be.getColIndex())).setWidth(be.getWidth() - 10); } } } }); Button bntDown = new Button(); bntDown.addSelectionListener( new SelectionListener() {
@Override
public void componentSelected(ButtonEvent ce) {
GridEvent gridEvent = new GridEvent(grid);
gridEvent.setModel(model);

//este es el evento que mando por boton que recojo en el presenter
grid.fireEvent(Events.Deactivate, gridEvent);
}
});

bntDown.setWidth(17);
bntDown.setHeight(17);
bntDown.setIconStyle("icon_bajar");

return bntDown;
}
};


//segundo boton
GridCellRenderer buttonUpRenderer = new GridCellRenderer() {
public Object render(final BaseModel model, String property, ColumnData config, final int rowIndex,
final int colIndex, ListStore store, final Grid grid) {
if (!init) {
init = true;

}


Button bntUp = new Button();
bntUp.addSelectionListener( new SelectionListener() {
@Override
public void componentSelected(ButtonEvent ce) {
GridEvent gridEvent = new GridEvent(grid);
gridEvent.setModel(model);
//evento que se lanza desde el view
grid.fireEvent(Events.TwinTriggerClick, gridEvent);
}
});
bntUp.setWidth(17);
bntUp.setHeight(17);
bntUp.setIconStyle("icon_subir");


return bntUp;
}
};

ColumnConfig columordenBajar= new ColumnConfig("in_orden", "", 30);
columordenBajar.setRenderer(buttonDownRenderer);
configs.add(columordenBajar);

ColumnConfig columordenSubir= new ColumnConfig("id_version", "", 30);
columordenSubir.setRenderer(buttonUpRenderer);
configs.add(columordenSubir);

ColumnConfig clmncnfgEditar = new ColumnConfig("idEditar", "", 80);
configs.add(clmncnfgEditar);

ColumnConfig clmncnfgEliminar = new ColumnConfig("idEliminar", "", 80);
configs.add(clmncnfgEliminar);

GridCellRenderer accionesEditarRenderer = new GridCellRenderer() {

@Override
public Object render(final BaseModel model, final String property, ColumnData config,
final int rowIndex, final int colIndex, final ListStore store,
final Grid grid) {

Anchor enlaceEditar = new Anchor("Editar", "#");
if (handlerEdit!=null) enlaceEditar.addClickHandler(handlerEdit);
return enlaceEditar;
}};
clmncnfgEditar.setAlignment(HorizontalAlignment.CENTER);
clmncnfgEditar.setRenderer(accionesEditarRenderer);


// Renderer de eliminar,
GridCellRenderer accionesEliminarRenderer = new GridCellRenderer() {

@Override
public Object render(final BaseModel model, final String property, ColumnData config,
final int rowIndex, final int colIndex, final ListStore store,
final Grid grid) {

Anchor enlaceEliminar = new Anchor("Eliminar", "#");
if (handlerDelete!=null) enlaceEliminar.addClickHandler(handlerDelete);
return enlaceEliminar;
}};

clmncnfgEliminar.setAlignment(HorizontalAlignment.CENTER);
clmncnfgEliminar.setRenderer(accionesEliminarRenderer);


grid = new Grid(new GroupingStore(), new ColumnModel(configs));
grid.setBorders(false);
//gridCompositeSecciones.setLoadMask(true);
grid.setAutoExpandColumn("no_garantia");
grid.setAutoExpandMax(1500);

grid.addListener(Events.ViewReady, Tools.configAutoHeightListener(this.grid, this.cp));
grid.addListener(Events.ColumnResize, Tools.configAutoHeightListener(this.grid, this.cp));
grid.getColumnModel().addListener(Events.HiddenChange, Tools.configAutoHeightListener(this.grid, this.cp));
grid.getStore().addListener(Store.Add, Tools.configAutoHeightListener(this.grid, this.cp));


Tools.maskEmptyGrid(grid, CasiopeaMessages.INSTANCE.grid_vacio_pulse_anadir());


en la parte del presenter en el bind() o donde declares los botones
como los eventos eran del grid aunque generados por los botoenes por eso tenemos que mandar el grid entero


this.display.getGrid().addListener(Events.Deactivate, new Listenert(){

@Override
public void handleEvent(GridEvent
be) {

actualizarSeccionOrden(-1,be.getModel(),be.getGrid().getStore().getCount());

}

});

this.display.getGrid().addListener(Events.TwinTriggerClick, new Listener
(){

@Override
public void handleEvent(GridEvent
be) {

actualizarSeccionOrden(+1,be.getModel(),be.getGrid().getStore().getCount());

}

});