[RESOLVIDO] Gerar um Relatório Personalizado - Simples

Amigos, estou tentando gerar um relatório personalizado e estou sem ideia de como fazer isso…
Segue imagem:

O problema é saber como eu vou resgatar os campos adicionando-os já na query e resgatando no meu construtor ou no método set.

Segue o código:

// Resgatando os checkboxs marcados do formulário
String[] campos = request.getParameterValues("campos");

// Adicionando os campos no construtor
Pessoal pessoal = new Pessoal(campos[0], campos[1], campos[2], campos[3], campos[4], campos[5], campos[6], campos[7], campos[8], campos[9]);

// Buscando os dados do BD pelo método buscaPessoalPersonalizado e adicionando à lista listaPessoal
List<Pessoal> listaPessoal = pd.buscaPessoalPersonalizado(pessoal);

Método da consulta ao BD:

public List<Pessoal> buscaPessoalPersonalizado(Pessoal p) throws Exception {

		open();
		// Lista de pessoas
		List<Pessoal> listaPessoal = new ArrayList<Pessoal>();
		stmt = con
				.prepareStatement("select nome = ?, matricula = ?, idFuncional = ?, lotacao = ?, simbolo = ?, doerj = ?, validade = ?, inidisp = ?, repOrigem =  ?, cargoEfet = ? from pessoal");
		stmt.setString(1, p.getMatricula());
		stmt.setString(2, p.getIdFuncional());
		stmt.setString(3, p.getLotacao());
		stmt.setString(4, p.getSimbolo());
		stmt.setString(5, p.getDoerj());
		stmt.setString(6, p.getValidade());
		stmt.setString(7, p.getInidisp());
		stmt.setString(8, p.getRepOrigem());
		stmt.setString(9, p.getCargoEfet());
		rs = stmt.executeQuery();

		while (rs.next()) {

			Pessoal pessoal = new Pessoal(rs.getString("nome"),
					rs.getString("matricula"), rs.getString("repOrigem"),
					rs.getString("cargoEfet"), rs.getString("simbolo"),
					rs.getString("doerj"), rs.getString("validade"),
					rs.getString("lotacao"), rs.getString("inidisp"),
					rs.getString("idFuncional"));

			listaPessoal.add(pessoal);

		}

		close();
		return listaPessoal;
	}

Se caso o usuário marcar todos os checkbox, eu sei que vai funcionar… mas e se ele marcar só 2… não sei gerenciar isso. Alguém pode me ajudar?

Muito obrigado amigos.

Cara, vc vai ter q ir verificando se o valor ta preenchido e ir concatenando em um StringBuilder. XD

Fica feio, mas funciona. Abraço!

Dê um nome único a cada checkbox e recupere-os pelo nome.

Página:

&lt;!-- ... --&gt; &lt;label for="um"&gt;Um&lt;/label&gt; &lt;input id="um" name="um" type="checkbox" /&gt; &lt;label for="dois"&gt;Dois&lt;/label&gt; &lt;input id="dois" name="dois" type="checkbox" /&gt; &lt;label for="tres"&gt;Três&lt;/label&gt; &lt;input id="tres" name="tres" type="checkbox" /&gt;<br /> &lt;!-- ... --&gt;
Servlet:

//... System.out.println(request.getParameter("um")); System.out.println(request.getParameter("dois")); System.out.println(request.getParameter("tres")); // ...
Se eu selecionar apenas um checkbox, os outros dois não serão enviados na requisição e request.getParameter() retornará nulo. Assim você pode validar quais foram selecionados.

Já na query, você terá que fazer algo como o amigo angeliski disse.

Resolvi amigos.

                // Resgatando os checkboxs marcados do formulário
		String[] campos = request.getParameterValues("campos");

		String parametros = "";

		for (int i = 0; i < campos.length; i++) {

			// Se for o último parâmetro, retira a vírgula
			if (i + 1 == campos.length) {

				parametros = parametros + campos[i];

			} else {

				parametros = parametros + campos[i] + ", ";
			}

		}

		String query = "select " + parametros
				+ " from pessoal where sitfunc != 'Ex-Servidor' order by nome";

		try {

			PessoalDao pd = new PessoalDao();

			List<Pessoal> listaPessoal = pd.buscaPessoalPersonalizado(query,
					campos);

		} catch (Exception e) {
			e.printStackTrace();
		}

No método de consulta fiz assim:

public List<Pessoal> buscaPessoalPersonalizado(String query, String[] campos)
			throws Exception {

		open();
		// Lista de pessoas
		List<Pessoal> listaPessoal = new ArrayList<Pessoal>();
		stmt = con.prepareStatement(query);
		rs = stmt.executeQuery();

		while (rs.next()) {

			Pessoal pessoal = new Pessoal();

			for (int i = 0; i < campos.length; i++) {

				if ("nome".equalsIgnoreCase(campos[i])) {

					pessoal.setNome(rs.getString("nome"));
				}

				if ("matricula".equalsIgnoreCase(campos[i])) {

					pessoal.setMatricula(rs.getString("matricula"));
				}

				if ("repOrigem".equalsIgnoreCase(campos[i])) {

					pessoal.setRepOrigem(rs.getString("repOrigem"));
				}

				if ("cargoEfet".equalsIgnoreCase(campos[i])) {

					pessoal.setCargoEfet(rs.getString("cargoEfet"));
				}

				if ("simbolo".equalsIgnoreCase(campos[i])) {

					pessoal.setSimbolo(rs.getString("simbolo"));
				}

				if ("doerj".equalsIgnoreCase(campos[i])) {

					pessoal.setDoerj(rs.getString("doerj"));
				}

				if ("validade".equalsIgnoreCase(campos[i])) {

					pessoal.setValidade(rs.getString("validade"));
				}

				if ("lotacao".equalsIgnoreCase(campos[i])) {

					pessoal.setLotacao(rs.getString("lotacao"));
				}

				if ("inidisp".equalsIgnoreCase(campos[i])) {

					pessoal.setInidisp(rs.getString("inidisp"));
				}

				if ("idFuncional".equalsIgnoreCase(campos[i])) {

					pessoal.setIdFuncional(rs.getString("idFuncional"));
				}

			}

			listaPessoal.add(pessoal);

		}

		close();
		return listaPessoal;
	}