struts2: update second select basado en el primer valor de selección usando javascript y jquery

Estoy trabajando en un proyecto de struts2 donde tengo 3 controles de selección de html, cada uno de los cuales depende de la selección previa. Supongamos que la primera selección es para el país, la segunda para el estado y la tercera para la ciudad. La list de opciones en la selección de estado se filtrará para mostrar solo los estados en ese país, etc. Debido a algunas otras limitaciones, estoy usando el control de selección html básico en lugar de struts2. Aquí hay una muestra de cómo estoy rellenando el select:

<select id="stateSelect" name="selectedState"> <s:iterator value="#session['myModel'].states" status="itr"> <option value="<s:property value="code"/>"> <s:property value="label"/> </option> </s:iterator> </select> 

Creo que lo que tengo que hacer es un evento onchange hacer una llamada ajax para recuperar la list de "estados" en function del "país" seleccionado. Las preguntas son:
1. ¿cómo puedo hacer esta llamada ajax usando jquery?
2. ¿Qué necesito pasar como URL para la llamada ajax? solo el nombre de la acción?
3. ¿cómo puedo analizar los resultados? Desde el código Java, puedo devolver una list de objects "State" que tienen "código" y "label" y otras properties. ¿Cómo puedo analizar esta list en javascript y generar las opciones adecuadas para la label de selección?

 <select id="stateSelect" name="selectedState" onchange="loadCities(this.value)"> <s:iterator value="#session['myModel'].states" status="itr"> <option value="<s:property value="code"/>"> <s:property value="label"/> </option> </s:iterator> </select> <select id="citySelect" name="selectedCity" > </select> 

JQuery

 function loadCities(value){ $("#citySelect").get(0).options.length = 0; $("#citySelect").get(0).options[0] = new Option("Loading cities", "-1"); $.ajax({ type: "POST", url: "MyStrutsActionToGetCities", data: "{stateID:" + value+ "}", contentType: "application/json; charset=utf-8", dataType: "json", success: function(msg) { $("#citySelect").get(0).options.length = 0; $("#citySelect").get(0).options[0] = new Option("Select city", "-1"); $.each(msg.d, function(index, item) { $("#citySelect").get(0).options[$("#citySelect").get(0).options.length] = new Option(item.Display, item.Value); }); }, error: function() { $("#citySelect").get(0).options.length = 0; alert("Failed to load cities"); } }); } 

Tomado de este tutorial

Actualización : este ejemplo se usa para cargar la list de la ciudad según el estado seleccionado. Puede hacer algo similar a la list de estado de carga en la selección de país. También aquí hay un enlace que describe una request / respuesta ajax para struts sin usar ningún complemento

En general, la forma de hacerlo es utilizando el plugin Struts2 JSON que se envía con versiones recientes de Struts2. Para interactuar con jQuery en su JSP, querrá usar s: url para crear una URL para su acción JSON y luego puede invocarlo usando jgetéon .getJSON () o .load ().

Sin embargo, si sus opciones desplegables realmente no son tan complicadas, no haga demasiadas architectures. Puede ser más fácil representarlos todos usando s: iterator en la carga de página inicial y usar .change () en sus cuadros desplegables para mover los datos entre los componentes seleccionados o boost el atributo de nombre en uno de los cuadros de selección para el formulario enviar.