Hola gente como estan, tengo una consulta, trabajo en una empresa, y realizamos un sistema para una fabrica, todo anda bien pero hay un problema con las ñ a la hora de cargar unos combos anidados de primra cargo bien los datos del primer combo con el action, pero el tema es mostrar los datos del combo anidado primero lo hacia asi.
Código Java:
Ver originalfunction clearElements(combo){
combo.options.length = 0;
nuevaOpcion
= new Option("",
""); combo.options[0] = nuevaOpcion;
i = 0;
var insumo = document.forms[0].insumo.options[document.forms[0].insumo.selectedIndex].value;
if(insumo != '')
opcionSeleccionar
= new Option('Cargando...',
''); else
opcionSeleccionar
= new Option('Seleccionar',
''); combo.options[i] = opcionSeleccionar;
}
function reloadProveedores() {
clearElements(document.forms[0].proveedor);
var id = document.forms[0].insumo.value;
new Ajax.
Request('<html:rewrite page="/reloadProveedor.do"/>',
{ parameters: {insumoId: id},
onComplete: function(transport, json) {
if(json.executeError){
alert(json.executeError);
}
i = 0;
while (i < json.length){
var property = json[i].insumoProveedorId;
var nom = json[i].nombreProveedor;
nom = nom.replace(/Ñ/g, 'Ñ');
propertyLabel = nom;
//9999: es usado para guardar la denominación de la unidad
if(property != '9999'){
nuevaOpcion
= new Option(propertyLabel, property
); document.forms[0].proveedor.options[i] = nuevaOpcion;
}else{
document.forms[0].unidad.value = propertyLabel;
}
i++;
}
//pregunto si es igual a 1 porque siempre va a venir almenos la unidad
if(json.length == 1){
opcionSeleccionar
= new Option('Seleccionar',
''); document.forms[0].proveedor.options[0] = opcionSeleccionar;
}
}
});
}
y el action que carga el segundo combo
Código Java:
Ver original@Override
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response
) throws Exception {
String insumoId
= request.
getParameter("insumoId"); logger.debug("insumoId para ajax: " + insumoId);
reloadProveedor(request, response, insumoId);
List<Insumo> listaInsumos = getServicioMaster().getInsumoDao().findAllEnableds();
request.setAttribute("insumos", listaInsumos);
List<UbicacionInsumo> listUbicaciones = getServicioMaster().getUbicacionInsumoDao().findAll();
request.setAttribute("ubicaciones", listUbicaciones);
return mapping.findForward(FORWARD_INIT);
}
public void reloadProveedor(HttpServletRequest request,
HttpServletResponse response,
String insumoId
) {
if (insumoId != null && StringUtils.isNotEmpty(insumoId)) {
Insumo insumo
= (Insumo
) getServicioMaster
().
getInsumoDao().
findInsumo(Integer.
parseInt(insumoId
));
List
<ProveedorInsumo
> objects
= getServicioMaster
().
getProveedorInsumoDao().
findProveedoresInsumo(Integer.
parseInt(insumoId
)); request.setAttribute("proveedores", objects);
logger.debug("Cantidad de proveedores: "+objects.size());
JSONArray json = new JSONArray();
for(ProveedorInsumo proveedorInsumo: objects){
JSONObject jsonObject = new JSONObject();
jsonObject.put("insumoProveedorId", proveedorInsumo.getProveedorInsumoId());
jsonObject.put("nombreProveedor", cambio(proveedorInsumo.getProveedor().getNombre()));
json.add(jsonObject);
}
//Agrego un objeto mas para llevar la denominación de la unidad a la vista
JSONObject jsonObject = new JSONObject();
jsonObject.put("insumoProveedorId", "9999");
jsonObject.put("nombreProveedor", insumo.getUnidad().getDenominacion());
json.add(jsonObject);
response.setHeader("X-JSON", json.toString());
}
}
int i;
do {
i = nom.indexOf(search);
if (i != -1) {
result = nom.substring(0,i);
result = result + sub;
result = result +nom.substring(i + search.length());
nom = result;
}
} while (i != -1);
return nom;
}
le agregue una modificacion el cual buscaba en cada objeto si tenia una Ñ o ñ y lo remplazaba por "Ñ" y al reves en el javascript de la jsp cambiaba "Ñ" por Ñ o ñ.