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

Pegando valor input type radio

Boa noite, a aula pegamos o valor do input com o tipo text, me veio um situação, na casa do codigo por exemplo é mostrado um radio buton onde o usuario decide qual tipo mais lhe agrada.

como seria a adaptação desse código para pegar a informação do radio

        <c:forEach items="${tipos }" var="tipoEmpresa" varStatus="status">
            </div>
                <label for="tipo_${tipoEmpresa }"> ${tipoEmpresa} </label>
                <input type="text" name="tipos[${status.index }].value" id="tipo_${tipoEmpresa }"/>
                <input type="hidden" name="tipos[${status.index }].tipoEmpresa" value="${tipoEmpresa }"/>
            <div>
        </c:forEach>

Uma outra questão tem alguma literatura ou onde diz o retorno do tipos de input, por exemplo o input text o seu retorno é uma string, e os demais como select ou radio?

desde já obrigado

5 respostas

Não sei se entendi o que você quer fazer. Acredito que seja algo do tipo:

<label for="tipo_empresa">  Tipo da empresa</label>
<c:forEach items="${tipos}" var="tipoEmpresa">   
                <input type="radio" name="tipo_empresa" value="${tipoEmpresa.id}"/> 
               <c:out value="${tipoEmpresa}"/>
               <br>
</c:forEach>

Ali no value do radio vai ser o valor que vai ser enviado pro servidor. Coloquei ele como tipo.id mas não sei se seu objeto 'Tipo' tem a propriedade 'id', então você arruma ai se não existir. Os retornos dos controles são texto também.

vlw por responder Yuri,

se eu entendi corretamente a questão do binding eu devo criar os atributos dos meus objetos de acordo com os que vou receber no na minha jsp. Por exemplo

input type="text" >> crio um atributo do tipo string input type="number" >> crio um atributo do tipo int

mas e para o caso de um input type="radio" qual o tipo de atributo devo criar?

solução!

Opa,

Desculpa a demora.

No caso, você pode colocar qualquer coisa para identificar... Pode ser um ENUM, uma String, um inteiro, o que achar mais adequado. Na hora que for passar esse valor para ser renderizado no HTML ele vai ser um pouco diferente de um 'input text' e 'input number' onde você apenas joga o valor na propriedade diretamente. No radio button, o valor que você vai definir é se ele está checkado ou não. Isso é feito com a propriedade checked. Para fazer isso você vai comparar se a propriedade do seu objeto é igual ao value do radio button que você está criando... se for igual você insere a propriedade checked nele.

Exemplo:

Empresa minhaEmpresa = new Empresa();
minhaEmpresa.setNome("minha empresa");
minhaEmpresa.setTipoEmpresa("MICRO_EMPRESA");

no seu html:

<label for="tipo_empresa">  Tipo da empresa</label>
<c:forEach items="${tipos}" var="tipoEmpresa">   
    <input type="radio" name="tipo_empresa" value="${tipoEmpresa}" 
        ${minhaEmpresa.tipoEmpresa eq tipoEmpresa ? 'checked' : ''}/> 
        <!-- Se o valor da propriedade do seu objeto for igual ao valor do radio button ele vai marcar com o checked.-->
    <c:out value="${tipoEmpresa}"/>
    <br>
</c:forEach>

Não sei se era exatamente essa sua dúvida mas qualquer coisa fala ai.

O mesmo exemplo só que usando um int ao invés de uma string:

Empresa minhaEmpresa = new Empresa();
minhaEmpresa.setNome("minha empresa");
minhaEmpresa.setTipoEmpresaId(1);

no seu html:

<label for="tipo_empresa">  Tipo da empresa</label>
<c:forEach items="${tipos}" var="tipoEmpresa">   
    <input type="radio" name="tipo_empresa" value="${tipoEmpresa.id}" ${minhaEmpresa.tipoEmpresaId == tipoEmpresa.id ? 'checked' : ''}/> <!-- Se o valor da propriedade do seu objeto for igual ao valor do radio button ele vai marcar com o checked.-->
    <c:out value="${tipoEmpresa}"/>
    <br>
</c:forEach>

vlw muito a ajuda Yuri consegui fazer aqui obrigado mesmo