Popular Checkbox

3 respostas
trekkerbr

Bom dia pessoal…

Tenho um formulário HTML onde o usuário pode selecionar opções dentro de um conjunto de checkbox, ex:

<input type="checkbox" name="veiculo" value="carro"> Carro <input type="checkbox" name="veiculo" value="moto"> Moto
Eu consigo transferir os valores para o Controller, popular um array com os valores selecionados, gravar no banco, etc.
Agora preciso criar outra página onde estes valores sejam recuperados e editáveis no mesmo formato, quer dizer utilizando checkbox que
poderão estar marcadas ou não.

Eu até consegui fazer isso utilizando JSTL:

<jsp:useBean id="umaPessoa" class="br.com.model.Pessoa" scope="request"/> <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> //O metodo veiculo() retorna um array com os valores selecionados no checkbox da página anterior. <input type="checkbox" name="veiculo" value="carro" <c:forEach var="veiculo" items="${umaPessoa.veiculo}"> ${veiculo == 'carro' ? 'checked' : ''}</c:forEach>>Carro<br> <input type="checkbox" name="veiculo" value="moto" <c:forEach var="veiculo" items="${umaPessoa.veiculo}"> ${veiculo == 'moto' ? 'checked' : ''}</c:forEach>>Moto<br>
Mas não gostei do código pois se tivesse 50 checkbox seriam 50 loops no mesmo array. Quais são as melhores alternativas neste caso?

3 Respostas

wbdsjunior
trekkerbr:
... Quais são as melhores alternativas neste caso?
não diria que é a melhor alternativa neste caso, mas você pode usar uma Collection(uma List ou um Map) em vez de um array.

com uma List, por exemplo:

class Pessoa {
    private List<String> veiculos;

    // get and set
}
<input type="checkbox" name="veiculo" value="carro" ${pessoa.veiculos.constains('carro') ? 'checked' : ''}>Carro<br> <!-- mais ou menos isso. não uso JSTL  muito tempo. -->
trekkerbr

Obrigado! Já é uma ideia. Não sei se a performance ficará melhor, mas é mais legível com certeza.
Eu acredito que tenha uma forma padronizada de fazer isso (sem utilizar frameworks), afinal não é uma necessidade fora do comum.

wbdsjunior

trekkerbr:
Obrigado! Já é uma ideia. Não sei se a performance ficará melhor, mas é mais legível com certeza.
Eu acredito que tenha uma forma padronizada de fazer isso (sem utilizar frameworks), afinal não é uma necessidade fora do comum.

a performance eu tenho certeza que melhorará. mas não sei se há uma forma padronizada para fazer isso.

Criado 15 de fevereiro de 2013
Ultima resposta 15 de fev. de 2013
Respostas 3
Participantes 2