Acceso a componente de array con tags de Struts

Tengo una lista almacenada en el contexto con una serie de empresas. Quiero acceder a ellas para mostrarlas en un select y utilizo este código que funciona sin ningún problema
<logic:present name="listaEmpresasBolsa">
<logic:iterate id="empresa" name="listaEmpresasBolsa">
<html:option value="${empresa}">
<bean:write name="empresa"/>
</html:option>
</logic:iterate>
</logic:present>
Bien! Ahora me interesa almacenar junto a cada empresa su abreviatura, por lo que lo que era una lista de Strings pasa a ser una lista de arrays de String (String[]) donde cada array tiene dos componentes (el nombre de la empresa, y su abreviatura)
Por ejemplo:
String nombre = "Abertis"; String abrev = "ABE"; String[] empr = {nombre, abrev}; lista.add(empr);
¿Cómo modifico el código inicial del html para acceder a un componente del array? Imagina que sigo queriendo mostrar el nombre de la empresa, pero ahora está en x[0] y no en un componente de la lista directamente. No me sirve almacenar en la lista un objeto con dos campos, que ya lo he pensado. No quiero crear una clase para algo que lógicamente no me aporta demasiado

2 respuestas

Respuesta
1
No sé lo veo raro.
A mi pto de vista, prefiero que lo hagamos con un bean.
Así mediante: getNombre o getAbreviatura podemos obtener exactamente lo que necesitamos. Y mucho más claro.
El problema está en que... tener un bean con los datos de una operación, vale, en una entidad del modelo de datos; tener un bean con los datos de una empresa, vale, es otra entidad; pero tener un bean sólo para acceder a una abreviatura... que además es algo que al cliente no le aporta nada sino que yo quiero utilizar para mejorar la vista de la jsp y evitar largos nombres de empresas...
Tampoco veo bien meter dicha abreviatura en el bean de una operación, porque una abreviatura no es un dato de una operación, rompe con mi esquema de datos, y meterlo en el bean de empresa... ni me parece correcto por no aportar nada al cliente, ni me soluciona nada porque el bean que manejo en la jsp en el de datos de operación.
No me digas que no se puede acceder a un componente de un array! Si un campo de un bean devolviera un array... ¿no se podría acceder a sus componentes?
Un saludo
Aunque ya halla dado con la solución (me la han dicho :p), no creas que no agradezco tu ayuda e interés.
Te digo cómo se hace lo que quería
<logic:present name="listaEmpresasBolsa">
<logic:iterate id="empresa" name="listaEmpresasBolsa">
<html:option value="${empresa[0]}">
${empresa[0]}
</html:option>
</logic:iterate>
</logic:present>
Seguramente tú también tenías curiosidad y te interesa
Gracias!
Respuesta
1
Pues es más sencillo que todo eso, en vez de pasar un objeto con arrays de strings, pasa dos objetos lista, uno con los nombres de las empresas y otro con las abreviaturas,
Iteras por ambos y vas rellenando el option con los valores que saques.
Lo había pensado también pero... la idea no es sólo rellenar un option, que eso es algo que sólo hago con los nombres de las empresas porque al usuario no le interesan las abreviaturas, sino que a partir de la empresa que seleccione el usuario, asociarle cuando corresponda (en cualquier otra página jsp) su abreviatura correspondiente.
Con una lista donde cada elemento es un array de dos componentes, a partir del nombre de la empresa que me dé el usuario obtengo rápidamente la abreviatura, pero con dos listas no, porque no hay forma de asociar una con otra. En el mejor de los casos debería recorrer siempre ambas listas (cuando de la otra manera recorro una), y supuestamente al encontrar el nombre, en el mismo índice de la otra lista tendría la abreviatura (eso es la solución que tú me propones, ¿no?), pero digo supuestamente porque si deseo añadir o eliminar empresas puede darme problemas, o si deseo ordenar la lista de empresas por orden alfabético las abreviaturas se descabalan... Me parece más eficiente y segura una única lista de arrays, porque sé que haga lo que haga, al lado de la empresa siempre está su abreviatura porque van unidas
Mi problema está en acceder a un componente de un array con los tags, porque... no me digas que si se introduce un array en un campo de un bean no se puede acceder a sus componentes! :)
Un saludo
Aunque ya halla dado con la solución (me la han dicho :p), no creas que no agradezco tu ayuda e interés.
Te digo cómo se hace lo que quería
<logic:present name="listaEmpresasBolsa">
      <logic:iterate id="empresa" name="listaEmpresasBolsa">
<html:option value="${empresa[0]}">
               ${empresa[0]}
</html:option>
     </logic:iterate>
</logic:present>
Seguramente tú también tenías curiosidad y te interesa
Gracias!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas