viernes, 27 de noviembre de 2009

ajaxEngine.sendRequest : Envío dinámico de parámetros

El uso normal de este método es el siguiente:
ajaxEngine.sendRequest('loadData', 'paramName1=' + paramValue1, ..., 'paramNameN=' + paramValueN);
Esto es válido cuando el número de parámetros es fijo. Pero en algunos casos, ese número de parámetros puede variar, por ejemplo si vamos a enviar los valores de un arreglo javascript (como los del post anterior). En tal caso, no resulta tan sencillo el llamado a dicho método. Pero la solución está aquí:
var queryS = "parteNombre="+parteNombre + "&incluir="+incluir;

for (i = 0; i < roles.length; i++){
   queryS += "&roles=" + roles[i];
}

var opt = {
  method: 'post',
  postBody: queryS,

onSuccess: function(t) {
},

on404: function(t) {
},

onFailure: function(t) {
}
};

ajaxEngine.sendRequest('loadData', opt);
Primero se crea el queryString con todos los parámetros que queremos enviar y luego se le pasa dinámicamente esa variable al postBody. La verdad no entiendo muy bien cómo funciona, pero funciona. Visto en http://forum.openrico.org/topic/519

Cómo enviar un arreglo en el request

No debe ser algo muy común, pero necesité enviar un arreglo de javascript en un request.
Digo que no debe ser algo muy común, porque pues para eso está el input checkbox.

Pero en este caso la idea no era que lo enviara el usuario sino que el arreglo se carga con variables de la jsp.

En fin, el caso es que para enviar ese arreglo como un parametro en el request, lo que toca hacer es enviar cada uno de los valores del arreglo con el mismo nombre de parámetro. Entonces el querystring sería:
...ActualizarRoles?roles=1&roles=3&roles=4&roles=8

Ya en el servlet, los valores se reciben de la misma manera que se reciben los valores de los checkboxes:
String [] roles = request.getParameterValues("roles");

lunes, 23 de noviembre de 2009

Rico: Too much recursion


Este error ha aparecido con algunas versiones de Rico. Lo que se debe hacer es usar una versión que no tenga el problema.

Pero me acaba de pasar con una versión de Rico que no tiene ese problema. Después de darle muchas vueltas encontré que estaba incluyendo dos veces cada una de las librerías prototype.js y rico.js.

Al dejar la inclusión de solo una de cada una, se resolvió el problema.