Cómo hacer que la etiqueta de radio Struts cree una lista vertical de botones de radio

Estoy usando una etiqueta de radio de struts que se está completando con una lista de objetos que tienen dos campos:

class MyAction { List myList; String selectedId public String execute() { ... myList = new ArrayList(); myList.add(new MyObject("1","first object"); myList.add(new MyObject("2","second object"); myList.add(new MyObject("3","second object"); ... } // Getters and Setters for myList & selectedId ... } class MyObject { String id; String name; MyObject(String id, String name) { this.id = id; this.name = name; } // Getters and Setters for id & name ... } 

Esto es lo que estaba usando en mi página para mostrar la lista de botones de radio

  

Sin embargo, esto produce una lista horizontal de botones de radio. Traté de agregarles un estilo CSS:

  .vertical input { display: block; }  

Pero esto hace que las tags y los botones de radio aparezcan también en líneas separadas, en lugar del botón de opción y la etiqueta en la misma línea:

  • primer objeto

  • segundo objeto

  • tercer objeto

    lo que quiero es:

  • primer objeto
  • segundo objeto
  • tercer objeto
  • es realmente simple, me refiero a usar el tema simple 🙂

      

    Esto hará que el name sea ​​una etiqueta y una id como propiedad para enviar

    después de googlear un poco … encontré algunas soluciones:

    1. Modificar extender el tema y modificar los puntales FTL para botones de opción: instrucciones aquí . Esto me pareció excesivo, o al menos soy demasiado flojo para eso 🙂

    2. Use una etiqueta de iterador, itere sobre cada elemento de la lista y genere un botón de opción y un salto de línea para cada elemento de la lista. La respuesta vino de aquí

    Elegí la opción dos (porque soy perezoso principalmente), aunque la opción uno sería un buen ejercicio.

    Así es como luce mi etiqueta struts ahora:

      

    Por lo tanto, el iterador funciona en una lista, por lo que establece el atributo de lista de la etiqueta de radio para que sea una lista de que contenga solo el objeto myObject actual. ListKey y listValue son entonces myObject.id y myObject.name

    Tengo una solución simple. En la lista, agregue un elemento a cada elemento como,

     first object 

    Funciona, aunque parece un truco.

    También puedes usar un mapa en el código de Java. Eso también tendrá el beneficio de deshacerse de la clase MyObject . Algo como:

     class MyAction { Map myMap; String selectedId; public String execute() { // ... myMap = new HashMap(); myMap.put("1","first object"); myMap.put("2","second object"); myMap.put("3","second object"); // ... } // Getters and Setters for myMap & selectedId // ... }