pessoal, tenho uma aplicação com servlet e jsp(que contem uma lista com um checkBox)
meu problema é o seguinte,
se o usuario fizer alguma requisição que for invalida, ele eh redirecionado novamente a servlet aonde automaticamente manda novamente para a jsp, mantendo os campos de datas com as mesmas ja selecionados anteriormente pelo usuario, porem os campos de checkBox inicialmente selecionados simplesmente sao desmarcado. Como devo fazer para manter o checkBox marcado??
Metodo da servlet que recebe os dados
private HistoricoMonitoramentoVo controladorInterativoJSP(HttpServletRequest request) throws ObjetoObrigatorioException
{
HistoricoMonitoramentoVo historicoMonitoramentoVo = (HistoricoMonitoramentoVo) getBuffer(request).getAttribute( HISTORICO_MONITORAMENTO_VO );
if (historicoMonitoramentoVo == null)
{
historicoMonitoramentoVo = new HistoricoMonitoramentoVo();
}
Validador.validaObjeto(historicoMonitoramentoVo);
historicoMonitoramentoVo.setDataInicio( StringUtil.toUtilData(request.getParameter(CAMPO_DATA_INICIO)) );
historicoMonitoramentoVo.setDataFim( StringUtil.toUtilData(request.getParameter(CAMPO_DATA_FIM)) );
String []array = request.getParameterValues(CAMPO_CHECKBOX_CODIGO_SERVICO);
if( Validador.isArrayValido( array ))
{
for( String codigoServico : array )
{
historicoMonitoramentoVo.getCollServico().add( new ServicoVo(StringUtil.toInteger( codigoServico )) );
}
}
return historicoMonitoramentoVo;
}
parte aonde insiro os checkBox na JSP
<table width="95%" cellpadding="0" cellspacing="1" align="center" >
<tr class="textoTitulo">
<td width="5%" align="center"><input id="todos" name="todos" type="checkbox" onclick="javascript:selecionaTodos();" /></td>
<td align="center" width="95%">*Serviços/Sistemas ativos</td>
</tr>
<c:forEach var="servicoAtualVo" items="${historicoMonitoramentoVo.servicoVo.collVO}" varStatus="indice">
<c:if test="${indice.index mod 2 != 0}">
<tr class="linhaImpar">
</c:if>
<c:if test="${indice.index mod 2 == 0}">
<tr class="linhaPar">
</c:if>
<td width="5%" align="center">
<input name="<%=Form.CAMPO_CHECKBOX_CODIGO_SERVICO%>"
type="checkbox"
value="${servicoAtualVo.codigo}"
id="<%=Form.CAMPO_CHECKBOX_CODIGO_SERVICO%>"/>
</td>
<td width="95%" align="left"><c:out value="${servicoAtualVo.nomeServico}"/></td>
</tr>
</c:forEach>
</table>
Quem tiver uma ideia que possa ajudar eu agradeço mto
sephil
Maio 10, 2011, 3:50pm
#2
Olá,
Qual o tipo da variável do seu VO? se for um boolean vc pode fazer assim:
<input name="<%=Form.CAMPO_CHECKBOX_CODIGO_SERVICO%>"
type="checkbox"
<%if(Form.isCAMPO_CODIGO_SERVICO()){%> //aqui seria o método get do VO para esse atributo.
checked = "checked"
<%}%>
value="${servicoAtualVo.codigo}"
id="<%=Form.CAMPO_CHECKBOX_CODIGO_SERVICO%>" />
A idéia é verificar se o campo foi marcado anteriormente e o objeto contém o valor correspondente a checkbox marcada, caso afirmativo, coloque a propriedade checked=“checked”
cara, o tipo da minha variavel Codigo é long.
sephil
Maio 10, 2011, 8:40pm
#4
e como funciona, quais os valores que são passados quando o campo está vazio ou checado?
checado = 1, vazio = 0 ?
Ele na verdade retorna pra servlet o codigo do serviço, e não se o mesmo eh checkced ou nao.
aki ele pega o codigo a ser mandado para a servlet
<input ...
... id="<%=Form.CAMPO_CHECKBOX_CODIGO_SERVICO%>"/>
e na servlet, é aki que ela cria o array de String’s com os campos selecionado
String []array = request.getParameterValues(CAMPO_CHECKBOX_CODIGO_SERVICO);
valeu sephil pela cooperaçao.
mas aki no serviço a renata me ajudeu e resolvi o meu problema
segue abaixo a solução
com a jsp e a servlet
JSP
<table width="95%" cellpadding="0" cellspacing="1" align="center" >
<tr class="textoTitulo">
<td width="5%" align="center"><input id="todos" name="todos" type="checkbox" onclick="javascript:selecionaTodos();" /></td>
<td align="center" width="95%">*Serviços/Sistemas ativos</td>
</tr>
<c:forEach var="servicoAtualVo" items="${historicoMonitoramentoVo.servicoVo.collVO}" varStatus="indice">
<c:forEach var="lista" items="${historicoMonitoramentoVo.listaCodigo}">
<c:if test="${lista == servicoAtualVo.codigo}">
<c:set value="1" scope="request" var="valor" />
</c:if>
</c:forEach>
<c:if test="${indice.index mod 2 != 0}">
<tr class="linhaImpar">
</c:if>
<c:if test="${indice.index mod 2 == 0}">
<tr class="linhaPar">
</c:if>
<td width="5%" align="center">
<input name="<%=Form.CAMPO_CHECKBOX_CODIGO_SERVICO%>"
type="checkbox"
value="${servicoAtualVo.codigo}"
id="<%=Form.CAMPO_CHECKBOX_CODIGO_SERVICO%>"
<c:if test="${valor != null}">checked="checked"</c:if>
/>
</td>
<td width="95%" align="left"><c:out value="${servicoAtualVo.nomeServico}"/></td>
</tr>
<c:remove var="valor" scope="request"/>
</c:forEach>
</table>
e a SERVLET
private HistoricoMonitoramentoVo controladorInterativoJSP(HttpServletRequest request) throws ObjetoObrigatorioException
{
HistoricoMonitoramentoVo historicoMonitoramentoVo = (HistoricoMonitoramentoVo) getBuffer(request).getAttribute( HISTORICO_MONITORAMENTO_VO );
historicoMonitoramentoVo.getCollServico().clear();
if (historicoMonitoramentoVo == null)
{
historicoMonitoramentoVo = new HistoricoMonitoramentoVo();
}
Validador.validaObjeto(historicoMonitoramentoVo);
historicoMonitoramentoVo.setDataInicio( StringUtil.toUtilData(request.getParameter(CAMPO_DATA_INICIO)) );
historicoMonitoramentoVo.setDataFim( StringUtil.toUtilData(request.getParameter(CAMPO_DATA_FIM)) );
String []array = request.getParameterValues(CAMPO_CHECKBOX_CODIGO_SERVICO);
historicoMonitoramentoVo.setListaCodigo(array);
if( Validador.isArrayValido( array ))
{
for( String codigoServico : array )
{
historicoMonitoramentoVo.getCollServico().add( new ServicoVo(StringUtil.toInteger( codigoServico )) );
}
}
return historicoMonitoramentoVo;
}