¿Cómo pasar datos de campo de texto de la acción ajax en Struts 2 a la llamada original .jsp?

No estoy seguro si ese título está redactado correctamente. Déjame explicarte lo que estoy tratando de hacer:

Tengo un archivo nuevo.jsp con un formulario

<s:form id="newdep" name="newdep" theme="simple" action="submitForm" >

En este formulario hay un cuadro de selección:

<s:select list="apps" name="app" onchange="javascript:show_details();return false;" />

Estoy usando Dojo para ajax y está llamando:

function show_details() {
    dojo.event.topic.publish("show_detail");
}

También dentro de este formulario tengo:

<s:url id="d_url" action="showComp" /> 
<sx:div id="details" href="%{d_url}" listenTopics="show_detail" formId="newdep" showLoadingText=""/>

Esto llama comp.jsp sobre la marcha con acción showComp.

Muestra una serie de campos de texto según la selección realizada en el cuadro de selección "aplicación".

Más específicamente, una vez que se selecciona una aplicación, un hashmap lstList se crea específicamente para esa aplicación (dentro de CompAction - la clase de acción para showComp) y se muestra así:

<s:iterator value="lstList">   
  <s:property value="key" />   
  &nbsp;&nbsp;&nbsp;
  <s:textfield name="value" value=""/> <!-- LINE I'M ASKING ABOUT -->
  <s:iterator value="value">     
    <br> 
  </s:iterator> 

He resaltado la línea del campo de texto porque no creo que sea correcto. Básicamente, lo que quiero hacer es:

  1. Haga que el usuario seleccione una aplicación del menú desplegable. (hecho)
  2. comp.jsp se llama y muestra la etiqueta relevante de hashmap + campo de texto para cada uno. (hecho)
  3. Las entradas del usuario en los campos de texto se guardan en hashmap cuando el usuario hace clic en el botón Enviar (no funciona)

Debo mencionar en este punto que después de hacer clic en enviar, el usuario es enviado a results.jsp.

Desde esta página puedo acceder fácilmente a los datos de la clase de acción más grande, FormAction. Pero no sé cómo acceder a los datos (como el hashmap) desde CompAction (una vez más, la clase de acción para la acción ajax).

Entonces, 4. Acceda a los datos de hashmap desde results.jsp (tampoco funciona)

Mi instinto natural fue usar

<s:property value="%{lstList}" /> 

in results.jsp pero sin suerte. Soy bastante nuevo en los puntales, pero estoy haciendo todo lo posible para tener una buena idea. ¿Algún consejo?

preguntado el 12 de junio de 12 a las 21:06

1 Respuestas

No estoy seguro de haberte entendido, pero intentaré ayudarte. Echando un vistazo a tu comp.jsp, especialmente la línea que ha resaltado, parece que está creando muchas entradas con el mismo nombre: "valor" (porque en <s:textfield /> "valor" no actúa como una variable, sino como un nombre simple), uno para cada entrada de hashmap. Te recomiendo que eches un vistazo al código HTML generado por comp.jsp. Dicho esto, si tiene muchos campos con el mismo nombre, todos los valores de estos campos se asignarán como un String[] en la acción Así que si defines un String[] en tu acción, obtendrás todos los valores.

Está bien, pero también necesita el nombre, quiero decir, debe ingresar el nombre-valor de la acción para todos sus campos. Para eso, primero, debes cambiar tu comp.jspolvídate de <s:textfield .../> y genera el código html por ti mismo:

<s:iterator value="lstList">   
    <input type="text" name="_<s:property value="key" />" value="<s:property value="value" />" />    
    <br> 
</s:iterator> 

Tenga en cuenta que todos los nombres de los campos comienzan con "_".

Luego, en la acción, debe acceder a la solicitud y obtener una lista de todos los parámetros en la solicitud, tomar aquellos que comienzan con "_" y construir el hashmap con sus nombres y valores usted mismo.

Respondido el 12 de junio de 12 a las 23:06

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.