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.