Checkbox dinâmicos - Struts 2

Olá,

Tenho uma tabela no banco de dados chamada “camadas”. Quero que quando eu abra a página, seja exibido na tela um checkbox para cada camada, ou seja, para cada registro da tabela camadas. Mas também quero que esses checkboxes guardem estado, ou seja, quando eu submeter o formulário, ele manter selecionados os checkboxes que eu tinha marcado.

Consegui fazer isso no Struts 2, mas tenho a impressão de que fiz uma grande GAMBIARRA… pois tive de criar dois atributos na action… Tem um jeito mais simples de fazer isso?

Vejam o código:

Camada.java:

public class Camada {

   private Integer id;
   private String nome;
   private boolean visivel;

   //getters e setters...

}

MinhaAction.action:

//imports...

public class MinhaAction extends ActionSupport {

   private List<Camada> camadas = new ArrayList<Camada>();
   private Set camadasVisiveis = new HashSet();


   public String execute() throws Exception {

      CamadaDAO camadaDAO = new CamadaDAO();
      camadas = camadaDAO.listaCamadas();

      for (Object o : camadasVisiveis) { 	   
         String s = (String)o;
         int i = Integer.parseInt(s);
         for (Camada camada : camadas) {
            if (camada.getId() == i) camada.setVisivel(true);
         }
      }
   }


   public String[] getCamadasVisiveis() {
      return (String[])camadasVisiveis.toArray();
   }

   public void setCamadasVisiveis(String[] c) {
      for (int i = 0; i < c.length; i++) {
         camadasVisiveis.add(c[i]);
      }
   }
	
   public List<Camada> getCamadas() {
      return camadas;
   }
	
   public void setCamadas(List<Camada> camadas) {
      this.camadas = camadas;
   }

}

PaginaJsp.jsp:

...

<s:iterator value="camadas">
   <s:checkbox name="camadasVisiveis" value="visivel" fieldValue="${id}" /><s:property value="nome"/>
</s:iterator>

...

Tem um jeito mais simples de fazer isso? Tem como usar só um atributo na action?

Obrigado.

Estou exatamente com o mesmo problema cara… :?
UP!!!

Cara, tb trabalho com Struts 2 e acho que eh por ai o caminho.

Da uma olhada nesse link, fala sobre o checkbox: http://www.roseindia.net/struts/struts2/struts2uitags/checkbox-tag.shtml

E esse tenta resolver o problema com Map tb: http://www.vitarara.org/cms/struts_2_cookbook/updating_a_list_of_domain_entities

Valew.

Olá pessoal,

Estive com a mesma dificuldade e resolvi simplesmente colocando na propriedade value a propriedade do objeto conforme abaixo:

<s:checkbox name="usuario.ativo" id="ckativo" label="Active" value="usuario.ativo" required="true"/>		

Espero que ajude…

Abraço!

Achei uma forma de pegar o id de um checkBox dentro de um iterator.

segue o código:

Classe JSP:
<s:iterator value="lista">
             <s:checkbox name="checkBoxSelecionados" id="lista.id" fieldValue="%{id}"/>
</s:iterator>

Class Java:

public class ClasseLista{
	private Integer[]	checkBoxSelecionados;

}

Qualquer duvida me manda mensagem que eu ajudo!