viernes, 23 de enero de 2009

GWT-EXT, Combo box, remoto con jsp's

Lo primero que necesitamos es crear HttpProxy y un store con la estructura de nuestro json, aunque por default este metodo se encarga de mandarle parametros con query, para este ejemplo no los tomaremos

HttpProxy dataProxy = new HttpProxy("EvaluacionJson.jsp?respuesta=revista");
RecordDef recordDef = new RecordDef(new FieldDef[]{
new StringFieldDef("clave", "clave"),
new StringFieldDef("name", "name"),});

JsonReader reader = new JsonReader(recordDef);
reader.setRoot("datos");
reader.setTotalProperty("totalCount");

Store store = new Store(dataProxy, reader, true);
store.reload();

ComboBox cbRevista = new ComboBox("Revista");

cbRevista.setStore(store);
cbRevista.setTitle("Revistas existentes");
cbRevista.setDisplayField("name");
cbRevista.setId("clave");
cbRevista.setMode(ComboBox.REMOTE);
cbRevista.setTriggerAction(ComboBox.ALL);
cbRevista.setLoadingText("Buscando...");
cbRevista.setWidth(300);
cbRevista.setEmptyText("-SELECCIONE UNA REVISTA-");
cbRevista.addListener(new ComboBoxListenerAdapter() {

public void onSelect(ComboBox comboBox, Record record, int index) {


String cveRev = record.getAsString("clave");

}
});

Podemos agregar el combo a un formpanel o aun panel, despues esta el listener del combo que escucha los eventos del combo con record.getAsString("clave") extraen el clave del combo.

El jsp :

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@page import="org.siir.json.JsonEvaluacion"%>
<%@page import="org.json.*"%>

<%

String respuesta = request.getParameter("respuesta");

if(respuesta.equals("revista")){
JsonEvaluacion jsonEvaluacion= new JsonEvaluacion();
String stringJson="";
try {
stringJson = jsonEvaluacion.obtenRevistasCandidatas();
} catch (JSONException ex) {
out.print("{\"totalCount\":0,\"datos\":[]}");
}
out.println(stringJson);
}


%>

el json:

package org.siir.json;

import java.util.List;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.siir.client.modelo.hemeroteca.RevistaExistente;
import org.siir.contenedor.ContenedorRevistaCandidata;

/**
*
* @author isaac
*/
public class JsonEvaluacion {

public String obtenRevistasCandidatas() throws JSONException{
ContenedorRevistaCandidata contenedorRev= new ContenedorRevistaCandidata();
List listRev = contenedorRev.getAllRevistaExistente();
JSONObject jsonObj = new JSONObject();
jsonObj.put("totalCount", listRev.size()+"");
JSONArray array = new JSONArray();


for(RevistaExistente rev:listRev){

JSONObject jsonDatos = new JSONObject();

jsonDatos.put("name",rev.getNombreRevista());
jsonDatos.put("clave",rev.getClave()+"");


array.put(jsonDatos);
}

jsonObj.put("datos",array);


return jsonObj.toString();


}


public static void main(String[] args) throws JSONException {
JsonEvaluacion jsonEvaluacion= new JsonEvaluacion();
System.out.println(jsonEvaluacion.obtenRevistasCandidatas());
}


}
el contenedor: claro esta tienen que iniciar una session hibernate, y todo ese choro, pueden reemplazar todo esto por un contenedor con sql, y con resultset construllen la lista de RevistaExistente

public List getAllRevistaExistente() {
Session s = sF.openSession();
Transaction tx = s.beginTransaction();
Query q = s.createQuery("from RevistaExistente p where p.estadoRevista = 1" );
List respuesta=q.list();
tx.commit();
s.close();
return respuesta;
}

el modelo:

public class RevistaExistente implements IsSerializable {
private Long clave;
private String nombreRevista;

con sus getters y setters...

1 comentario:

Anónimo dijo...

Hola...
Muy bueno tu blog quisiera ver si me hechas la mano, tengo un combo con ciudades al hacer clic quiero que se me cargue en otro combo ciertas zonas de acuerdo a la ciudad q escogi y cada vez q escoja la ciudad vuelva a cargar el comb de zonas estoy trabajando con servlet????
Cualquier ayuda que me podrias dar de antemano te quedo agradecido.....