Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

Dúvida para utilizar Checkbox no Vraptor

Olá pessoal!

Preciso de ajuda para utilizar o checkbox, meu objetivo é conferir se o usuário está ativo ou não. Mas estou tendo problemas para gravar o valor no checkbox.

Preciso que quando o checkbox estiver marcado, ele atribua 1 no ${usuario.ativo}, e quando não estiver marcado atribua zero . Mas está sempre vindo como "null".

segue o código:

label for="ativo">Usuário ativo?</label>
    <input type="checkbox" name="usuario.ativo" id="ativo" value="${usuario.ativo}" />
    <alura:validationMessage name="usuario.ativo"/>

obs. Quando troco para type="text" funciona normalmente informando 1 e 0, mas queria utilizar o checkbox.

6 respostas

Fala Marciel, tudo bem ?

Imagino que dê pra fazer algo assim:

<label for="ativo">Usuário ativo?</label>
<input type="checkbox" name="usuario.ativo" id="ativo" value="1"  ${usuario.ativo? 'checked' : '' }/>
<alura:validationMessage name="usuario.ativo"/>

Olá Rafael!

Aqui não funcionou, agora traz sempre com o checked marcado. Mesmo quando não deveria.

Estou procurando no google, mas ainda não encontrei algo que funcione também.

Fala Marciel ..

O campo ativo é um inteiro né ? Então pode ser que a expressão ${usuario.ativo? 'checked' : '' } não seja resolvida de forma correta.

Eu consideraria utilizar um tipo boolean pra campo de status. Sendo assim, imagino que o seguinte código funcionaria.

<label for="ativo">Usuário ativo?</label>
<input type="checkbox" name="usuario.ativo" id="ativo" value="true"  ${usuario.ativo ? 'checked' : '' }/>
<alura:validationMessage name="usuario.ativo"/>

Senão seria necessário algo como ${usuario.ativo == 1 ? 'checked' : '' }. Mas a boa prática diz pra usar um valor lógico (boolean) pra campos onde fundamentalmente você considera status (sim/não - ativo/inativo - etc). Dê uma olhada nisso.

Espero ter ajudado. Abraço!

Rafael Rollo!

Valeu Rafael, está ajudando sim.

Gostaria de entender mais essa linha:

<input type="checkbox" name="usuario.ativo" id="ativo" value="true"  ${usuario.ativo ? 'checked' : '' }/>

especialmente essa parte:

 ${usuario.ativo ? 'checked' : '' }

parece ser um tipo de if, com comportamento valido e não válido... mas como isso funciona? posso sempre atribuir um valor dos meus dados e passar essas condições? achei bem bacana essa estrutura.

Abraços

solução!

Fala Marciel, tudo bem ?

Essa é a estrutura de um if ternário, como chamam por aí rs. Ele é constituído em três passos. Primeiro a condição a ser validada, segundo o que vai ser retornado em caso de sucesso (true), e por fim o que vai ser retornado em caso de insucesso (false).

Via Expression Language seria ${ condição ? retornoDeSucesso : retornoEmCasoDeInsucesso }, onde condição é qualquer coisa que retorne um boolean (seja acesso direto a uma variável boolean - como no caso do status - ou seja uma condição expressa tipo ${ usuario.nome != null ..} ou ${usuario.ativo}) =)

Nesse caso como queremos que o checkbox só venha marcado se o usuario estiver ativo usamos ${usuario.ativo ? 'checked' : ''}. Assim caso ativo seja true, no local onde fazemos a expressão será impresso o atributo do input chamado checked que justamente deixa o input marcado - <input type="checkbox" name="usuario.ativo" id="ativo" value="true" checked />. Em caso negativo, nada será impresso e o input estará desmarcado.

Abraço!

Valeuzão Rafael!