Ajuda com checklist e servlet

Boa tarde! gostaria de saber como posso fazer minha servlet pegar apenas os marcados(e seus repectivos dados), pois como eustou fazendo ela traz todos os campos enviados para ela, como verificar se esta marcado? outra duvida dessa forma q fiz eu consivo ver todos os campos independende de estar marcado ou nao ou seja todos os campos dentro do formulario sao enviados, teria alguma forma de enviar apenas os checados?, mas tbm nao sei como destrinchar para atribuir cada campo a seu respectivo objeto.
segue o trecho dos checklist:

<body>
  <div id="main-container" >
    <h3 class="text-info">Escolha os itens a baixo!</h3>
    <hr>
    <div style="margin-bottom: 20px">
      <fmt:setLocale value="pt-BR" />
      <fieldset></fieldset>
      
      <form action="preparando.do">
        <table id="checkTable">
          <tr>
            <th class="tituloTable">ID</th>
            <th class="tituloTable">Descrição</th>
            <th class="tituloTable">Preço</th>
            <th class="tituloTable">Img</th>
          </tr>
          
          <c:forEach var="listar" items="${ListaRetornada}" varStatus="status">
            <tr>
              <td>
                <label for="${listar.idCosmos}">
                  <input id="${listar.idCosmos}" type="checkbox" name="item" value="${listar.idCosmos}">${listar.idCosmos}
                </label>
              </td>
              
              <td>
                <label for="${listar.idCosmos}">
                  ${listar.descricaoCosmos}
                  <input type="hidden" name="item" value="${listar.descricaoCosmos}">
                </label>
              </td>
              
              <td>
                <label for="${listar.idCosmos}">
                  <fmt:formatNumber value="${listar.precoVendaCosmos}" minFractionDigits="2" type="currency" />
                  <input type="hidden" name="item" value="${listar.precoVendaCosmos}">
                </label>
              </td>
              
              <td>
                <label>
                  <input type="file" name="files" id="file${listar.idCosmos}" multiple style="margin-bottom: 20px" />
                  <button class="btn btn-primary" id="btn" type="button" onclick="startUploading(${listar.idCosmos})">
                    <i class="fa fa-upload"></i>
                    Upload file
                  </button>
                </label>
              </td>
              
              <!-- <td><div id="upload-status-container"></div>  </td> -->
            </tr>
            
            <input type="hidden" name="item" value="${listar.idCosmos}" >
            <input type="hidden" name="item" value="${listar.classificacaoFiscalNCM}" >
            <input type="hidden" name="item" value="${listar.estoqueCosmos}" >
            <input type="hidden" name="item" value="${listar.precoCusto}" >
            <input type="hidden" name="item" value="${listar.cdFornecedor}" >

            <input type="hidden" name="item" value="${listar.descFornecedor}" >
            <input type="hidden" name="item" value="${listar.pesoliq}" >
            <input type="hidden" name="item" value="${listar.cdBarraUND_gtin_ean}" >
            <input type="hidden" name="item" value="${listar.largura}" >
            <input type="hidden" name="item" value="${listar.altura}" >
            <input type="hidden" name="item" value="${listar.profundidade}" >		
            <input type="hidden" name="item" value="${listar.descProdFornecedor}" >	
            <input type="hidden" name="item" value="${listar.marca}" >	
            <input type="hidden" name="item" value="${listar.descCurta}" >	
            <input type="hidden" name="item" value="${listar.precoCompra}" >	
            <input type="hidden" name="item" value="${listar.categoriaProduto}">
          </c:forEach>
        </table>
        
        <input type="submit" value="Enviar dados">
      </form>
    </div>
    
    <hr>
    
    <div id="upload-header">
      <span id="upload-header-text"></span>
      <i class="action-icon fa fa-window-minimize pull-right" onclick="showHide(this)" title="minimize"></i>
    </div>
    
    <div id="progress-bar-container">
      <table class="table">
        <tbody></tbody>
      </table>
    </div>
  </div>

e segue a servlet que recebe os campos acima:


package controle;

import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;

import javax.swing.JOptionPane;

import beans.BeanTempImg;

/**
 * Servlet implementation class PreparaParaCsv
 */
public class PreparaParaCsv extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public PreparaParaCsv() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#service(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		//HttpSession session = request.getSession(true);
		//Collection<BeanTempImg> listaIDLink = new ArrayList<BeanTempImg>();
		
	//	listaIDLink=	(Collection<BeanTempImg>) session.getAttribute("listaImg");
			
		BeanTempImg dp = new BeanTempImg();
//	String  [] a =request.getParameterValues("aa");
	//JOptionPane.showMessageDialog(null, a);
		String[] results = request.getParameterValues("item");
		for (int i = 0; i < results.length; i++) {
		    System.out.println( results[i]); 
		    
		    /*
		     * como eu podereia aqui destrinchar 
		     * id- objeto.set....
		     * peso- objeto.set... e assim sucessivamete
		     * 
		     * */
		}
	//	for (BeanTempImg dp :listaIDLink) {
			// System.out.println(dp.getId()+" 888888888888888888888888888888888888- "+dp.getCaminhoString());
	//		}
//
	
	}

}

teria alguma outra maneira que eu possa enviar apenas os marcados no formuario ou alguma forma de comparar para ver se esta marcado para eu pega as informações apenas dos campos que o usuario marcou o chekbox? desde já grato a qualquer ajuda que possa me tirar desse perrengue.

Pelo que me lembro, ao pegar os dados de checkbox de mesmo name do request, serão retornados os valores apenas aqueles que estiverem marcados.

O que talvez esteja faltando é colocar seu form para executar um POST em vez de GET (default):

<form action="preparando.do" method="post">

Bom dia! infelizmente neste caso ta chegando tudo na servelet, e não to sabendo o que esta errado!

Eita, mesmo alterando o form para POST não foi? Vou tentar montar um exemplo aqui e posto se funcionar.

sim mesmo alterando para post, blz brother vou aguardar, pq vejo e revejo aqui mas nao encontro o erro.

Implementei um exemplo aqui e funcionou, veja:

CadastroServlet

import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/cadastro.do")
public class CadastroServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	public CadastroServlet() {
		super();
	}

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// faz nada
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String[] names = request.getParameterValues("names");
		List<String> list;
		
		if (names != null) {
			list = Arrays.asList(names);
		} else {
			list = new ArrayList<>();
		}
		
		request.setAttribute("names", list);
		RequestDispatcher rd = request.getRequestDispatcher("index.jsp");
		rd.forward(request, response);
	}
}

index.jsp

<%@page import="java.util.ArrayList"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>

<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>

<body>
	<form action="cadastro.do" method="post">
		<h1>Employee List</h1>
		<table>
			<tr>
				<td><input type="checkbox" name="names" value="Yashwant" />Yashwant</td>
			</tr>
			<tr>
				<td><input type="checkbox" name="names" value="Vishal" />Vishal</td>
			</tr>
			<tr>
				<td><input type="checkbox" name="names" value="Suhas" />Suhas</td>
			</tr>
		</table>
		<input type="submit" value="Submit" />
	</form>

	<h1>Selected Checkboxes</h1>
	
	<table cellpadding="1" cellspacing="1" border="1" bordercolor="gray">
		<tr>
			<td>Name</td>
		</tr>
		<%
		List<String> employees = (List<String>) request.getAttribute("names");
		
		if (employees == null) {
			employees = new ArrayList();
		}
		
		for (String e : employees) {
		%>
		<tr>
			<td><%=e%></td>
		</tr>
		<%
		}
		%>
	</table>
</body>

</html>

pois é, mas no meu caso esta sendo enviado só que tudo independente de esta checkado ou nao… e isso que to achando estranho.

Ah mano, descobri o erro. Acontece que vc tem outros inputs no mesmo form com o mesmo name. Tem que definir names diferentes para os outros inputs. Deve ser isso que está causando o problema.

Vlw brother realmente eu nao tinha me atentado a isso, ve se pode me ajudar agora com outra dúvida, como eu dividiria as informações passadas pelo chklist e atribuiria a cada objeto , tipo id vai para o objeto id peso para o objjeto peso assim sucessimamente?

Funcionou?

Essas propriedades id, peso`, etc, são os valores dos checkboxes?

funcionou, e sim as propiedades sao os valores que envio atraves do chkbox.

O que seria essa ${ListaRetornada} na JSP? De que tipo é essa lista?

nao essa lista eu recebo para montar as informações para que o usuario marque os checkbox que ele quizer, depois disso envio todas as informações pertinentes ao item marcado no checkBox para outra servlet que é o responsavel por tratar essas informações por isso queria saber como atribuir cada propriedade enviada no chkbox para seu respectivo objeto, mas to começando a achar que é melhor eu pegar o chk marcardo e comparar com a lista que origina a ${ListaRetornada} e pegar as informações dela mesmo.

Mas qual o tipo dessa lista?

List<???> ListaRetornada

Qual é a classe das interrogações na definição dessa lista?

Obrigado pela ajuda, suas dicas me fizeram ver o meu erro, eu tava complicando o que é simples, segue a solução adotada
abaixo tem a lista que a jsp recebe e exibe as informações com o chkbox para que o usuario possa escolher qual produto sera tratado.

<form action="preparando.do">
			<table id="checkTable">
				<tr >
					<th class="tituloTable">ID</th>
					<th class="tituloTable">Descrição</th>
					<th class="tituloTable">Preço</th>
					
					<th class="tituloTable">Img</th>
				</tr>
				
				<c:forEach var="listar" items="${ListaRetornada}" varStatus="status">
					<tr >
																
						<td><label for="${listar.idCosmos}"> <input id="${listar.idCosmos}" type="checkbox" name="chklst" value="${listar.idCosmos}">
		<input type="hidden" name="id${listar.idCosmos}" value="${listar.idCosmos}" >
				<input type="hidden" name="ncm${listar.idCosmos}"  value="${listar.classificacaoFiscalNCM}" >
				<input type="hidden"  name="estk${listar.idCosmos}"  value="${listar.estoqueCosmos}" >
				<input type="hidden" name="pcusto${listar.idCosmos}"  value="${listar.precoCusto}" >
				<input type="hidden" name="idf${listar.idCosmos}"  value="${listar.cdFornecedor}" >
				<input type="hidden" name="desc${listar.idCosmos}" value="${listar.descricaoCosmos}" >
				<input type="hidden"  name="descf${listar.idCosmos}"  value="${listar.descFornecedor}" >
				<input type="hidden"  name="peso${listar.idCosmos}"  value="${listar.pesoliq}" >
				<input type="hidden"  name="cdbarra${listar.idCosmos}" value="${listar.cdBarraUND_gtin_ean}" >
				<input type="hidden"  name="largura${listar.idCosmos}"  value="${listar.largura}" >
				<input type="hidden"  name="altura${listar.idCosmos}"  value="${listar.altura}" >
				<input type="hidden"  name="profundidade${listar.idCosmos}"  value="${listar.profundidade}" >		
				<input type="hidden" name="descprodfor${listar.idCosmos}"  value="${listar.descProdFornecedor}" >	
				<input type="hidden" name="marca${listar.idCosmos}"  value="${listar.marca}" >	
				<input type="hidden"  name="deccurta${listar.idCosmos}"  value="${listar.descCurta}" >	
				<input type="hidden"  name="precocompra${listar.idCosmos}"  value="${listar.precoCompra}" >	
				<input type="hidden"  name="cat${listar.idCosmos}"  value="${listar.categoriaProduto}">
				<input type="hidden"  name="precoVenda${listar.idCosmos}"  value="${listar.precoVendaCosmos}">
		${listar.idCosmos}</label> </td>
						
						<td><label for="${listar.idCosmos}"> ${listar.descricaoCosmos} <input type="hidden" name="item" value="${listar.descricaoCosmos}" ></label> </td>
						<td><label for="${listar.idCosmos}"> <fmt:formatNumber value="${listar.precoVendaCosmos}" minFractionDigits="2" type="currency" /><input type="hidden" name="item" value="${listar.precoVendaCosmos}" ></label> </td>
									<td><label>  <input type="file" name="files" id="file${listar.idCosmos}" multiple style="margin-bottom: 20px" />
            <button class="btn btn-primary" id="btn" type="button" onclick="startUploading(${listar.idCosmos})" ><i class="fa fa-upload"></i> Upload file</button></label> </td>
		
						<!-- <td><div id="upload-status-container"></div>  </td> -->
			
		
					</tr>
			
				</c:forEach>
				
		</table>
		<input type="submit" value="Enviar dados">
		</form>
         </div>

como vc disse eu nao tinha me atentado que todos os produtos dessa lista estavam com o mesmo nome, por isso sempre ia todos independente de esta marcado ou nao(visto q o marcado tinha o mesmo nome do nao marcado), solução renomear o “name” da tag com o id de cada produto ou seja cada linha da tabela gerada pela lista terá um nome diferente visto que os id sao unicos; com essas mudança eu só precisava enviar o id do chkBox
para a servelt , agora o q foi feito na servelt :slight_smile:

	   boolean cb2 = Boolean.parseBoolean((request.getParameter("chklst")!=null?"true":"false"));
		   if(cb2){
		   String cb[] = request.getParameterValues("chklst");
		  
		   
           for(int i=0; i<cb.length;i++){
        	   pb = new ProdutosBeans();
        	   pb.setIdCosmos(Integer.parseInt(request.getParameter("id"+cb[i])));
        	   pb.setDescricaoCosmos(request.getParameter("desc"+cb[i]));
        	   pb.setClassificacaoFiscalNCM(request.getParameter("ncm"+cb[i]));
        	   pb.setEstoqueCosmos(Double.parseDouble(request.getParameter("estk"+cb[i])));
        	   pb.setPrecoCusto(Double.parseDouble(request.getParameter("pcusto"+cb[i])));
        	   pb.setCdFornecedor(Integer.parseInt(request.getParameter("idf"+cb[i])));
        	   pb.setDescFornecedor(request.getParameter("descf"+cb[i]));
        	   pb.setPesoBruto(Double.parseDouble(request.getParameter("peso"+cb[i])));
        	   pb.setPesoliq(Double.parseDouble(request.getParameter("peso"+cb[i])));
        	   pb.setCdBarraUND_gtin_ean(request.getParameter("cdbarra"+cb[i]));
        	   pb.setLargura(Double.parseDouble(request.getParameter("largura"+cb[i])));
        	   pb.setAltura(Double.parseDouble(request.getParameter("altura"+cb[i])));
        	   pb.setProfundidade(Double.parseDouble(request.getParameter("profundidade"+cb[i])));
        	   pb.setDescProdFornecedor(request.getParameter("descprodfor"+cb[i]));
        	   pb.setMarca(request.getParameter("marca"+cb[i]));
        	   pb.setDescCurta(request.getParameter("deccurta"+cb[i]));
        	   pb.setPrecoCompra(Double.parseDouble(request.getParameter("precocompra"+cb[i])));
        	   pb.setCategoriaProduto(request.getParameter("cat"+cb[i]));
        	   pb.setPrecoVendaCosmos(Double.parseDouble(request.getParameter("precoVenda"+cb[i])));
        	   listaPronta.add(pb);
           }
        }else {
            //mostra que não foi nada clicado
        	 System.out.println("Clica animal");}
			
          
           
		



 for (ProdutosBeans dp :listaPronta) {
 
	 System.out.println("meu id->"+dp.getIdCosmos()+" minha desc->"+ dp.getDescricaoCosmos()+" minha desc curta->"+dp.getDescCurta()+" meu preco->"+dp.getPrecoVendaCosmos());
	 
}

aqui eu verifico se chkBox é nulo pra nao da erro, nao sendo ,pego os valores do id enviado ,
feito isso eu simplismente vou buscar os paramentros do produto que tem na tag o name+id correspondente, para ficar mais claro vou deixar o código que o navegador renderiza.
agora sim recebo apenas os produtos selecionados no chkBox e ja passo as propriedades diretamente para o objeto respectivo.

código renderizado pelo navegador :

<form action="preparando.do">
			<table id="checkTable">
				<tr >
					<th class="tituloTable">ID</th>
					<th class="tituloTable">Descrição</th>
					<th class="tituloTable">Preço</th>
					
					<th class="tituloTable">Img</th>
				</tr>
				
				
					<tr >
																
						<td><label for="96537"> <input id="96537" type="checkbox" name="chklst" value="96537">
		<input type="hidden" name="id96537" value="96537" >
				<input type="hidden" name="ncm96537"  value="32131000" >
				<input type="hidden"  name="estk96537"  value="6.0" >
				<input type="hidden" name="pcusto96537"  value="12.47" >
				<input type="hidden" name="idf96537"  value="943" >
				
				<input type="hidden"  name="descf96537"  value="LEONORA COMERCIO INTERNACIONAL LTDA" >
				<input type="hidden"  name="peso96537"  value="0.15" >
				<input type="hidden"  name="cdbarra96537" value="7897256223023" >
				<input type="hidden"  name="largura96537"  value="20.0" >
				<input type="hidden"  name="altura96537"  value="5.0" >
				<input type="hidden"  name="profundidade96537"  value="27.0" >		
				<input type="hidden" name="descprodfor96537"  value="AQUARELA GODÊ C/ 12 CORES LEONORA" >	
				<input type="hidden" name="marca96537"  value="LEONORA" >	
				<input type="hidden"  name="deccurta96537"  value="Aquarelável.
Estojo Blistado.
Lavável.
Solúvel em água.
Atóxico.
Pastilhas com 33mm de diâmetro e 3mm de altura.
COMPOSIÇÃO
Resina termoplástica, tinta, carbonato de cálcio e goma de pêssego." >	
				<input type="hidden"  name="precocompra96537"  value="11.34" >	
				<input type="hidden"  name="cat96537"  value="MATERIAL ARTISTICO">
		96537</label> </td>
						
						<td><label for="96537"> AQUARELA GODÊ C/ 12 CORES LEONORA <input type="hidden" name="item" value="AQUARELA GODÊ C/ 12 CORES LEONORA" ></label> </td>
						<td><label for="96537"> R$ 17,00<input type="hidden" name="item" value="17.0" ></label> </td>
									<td><label>  <input type="file" name="files" id="file96537" multiple style="margin-bottom: 20px" />
            <button class="btn btn-primary" id="btn" type="button" onclick="startUploading(96537)" ><i class="fa fa-upload"></i> Upload file</button></label> </td>
		
						<!-- <td><div id="upload-status-container"></div>  </td> -->
			
		
					</tr>
			
				
					<tr >
																
						<td><label for="96538"> <input id="96538" type="checkbox" name="chklst" value="96538">
		<input type="hidden" name="id96538" value="96538" >
				<input type="hidden" name="ncm96538"  value="96099000" >
				<input type="hidden"  name="estk96538"  value="12.0" >
				<input type="hidden" name="pcusto96538"  value="30.12" >
				<input type="hidden" name="idf96538"  value="943" >
				
				<input type="hidden"  name="descf96538"  value="LEONORA COMERCIO INTERNACIONAL LTDA" >
				<input type="hidden"  name="peso96538"  value="0.38" >
				<input type="hidden"  name="cdbarra96538" value="7897256223030" >
				<input type="hidden"  name="largura96538"  value="20.0" >
				<input type="hidden"  name="altura96538"  value="4.0" >
				<input type="hidden"  name="profundidade96538"  value="26.0" >		
				<input type="hidden" name="descprodfor96538"  value="Giz de Cera Color Gel Metálico 12 Cores Leo e Leo" >	
				<input type="hidden" name="marca96538"  value="LEONORA" >	
				<input type="hidden"  name="deccurta96538"  value="CARACTERÍSTICAS DO PRODUTO

Embalagem rígida.
Super macio.
Retrátil.
Lavável.
Aquarelável.
Não suja as mãos.
Cores: preto, prata, verde, turquesa, azul escuro, azul claro, roxo, coral, dourado, amarelo queimado e amarelo claro." >	
				<input type="hidden"  name="precocompra96538"  value="28.69" >	
				<input type="hidden"  name="cat96538"  value="ESCOLAR">
		96538</label> </td>
						
						<td><label for="96538"> Giz de Cera Color Gel Metálico 12 Cores Leo e Leo <input type="hidden" name="item" value="Giz de Cera Color Gel Metálico 12 Cores Leo e Leo" ></label> </td>
						<td><label for="96538"> R$ 40,90<input type="hidden" name="item" value="40.9" ></label> </td>
									<td><label>  <input type="file" name="files" id="file96538" multiple style="margin-bottom: 20px" />
            <button class="btn btn-primary" id="btn" type="button" onclick="startUploading(96538)" ><i class="fa fa-upload"></i> Upload file</button></label> </td>
		
						<!-- <td><div id="upload-status-container"></div>  </td> -->
			
		
					</tr>

Muito Obrigado pela ajuda, e fica a solução aí, vai que ajuda alguem. abraço.

1 curtida