Relacionamentos n para n (Struts2 + JDBC + Mysql)

0 respostas
E

Boa Tarde! Espero que possam me ajudar!

Então preciso fazer um sistema que possui um relacionamento n para n (muitos para muitos).
O caso é o seguinte: é um sistema de agendamento de eventos, em cada evento participam n pessoas, e cada pessoa pode participar de n eventos.

Tenho conhecimento de que, para nesses casos, é preciso criar uma tabela auxiliar, por exemplo canditados_por_evento, entao criei as seguintes tabelas:

-Eventos - (#id_evento, evento, dados, etc)

-Candidatos - (#id_candidato, nome, dados, etc)

-Participantes - (tabela auxiliar) - (#id, *id_evento, *id_candidato);

Até aí tudo bem, vou dizer como o sistema esta funcionando no momento!

Há um jsp que lista todos os eventos em uma table; para cada evento há a opção de Alterar evento, Excluir evento, e ADICIONAR (adiciona o participante no evento)

Bem aih que reside o problema, o botão adicionar não quer funcionar

A ideia é de que ao clicar nesse botão, abra um formulário que possibilite a inserção de candidatos no evento.

O que foi feito té o momento:
-O sistema utiliza Struts2 e JDBC, existe uma action IncluiParticipanteAction, que tinha como função achar o Id do evento e passar para o jsp de cadastro de participante:

Action

package arima.web.action;

import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Result;

import arima.web.jdbc.classes.Evento;
import arima.web.jdbc.classes.Participante;
import arima.web.jdbc.dao.ParticipanteDAO;
import arima.web.jdbc.dao.eventoDAO;

public class IncluiParticipanteAction {

	
	private Participante participante;
	
	
	@Action(value="incluiParticipante", results = {
		@Result (name="ok", location="adiciona-participante.jsp")
	})
	public String execute() {
		ParticipanteDAO dao = new ParticipanteDAO();
		this.participante = dao.buscaPorId(this.participante.getId_evento());
		return "ok";
	}


	public Participante getParticipante() {
		return participante;
	}


	public void setParticipante(Participante participante) {
		this.participante = participante;
	}

}

Classe DAO

public Participante buscaPorId(Long id) {
		try {
			PreparedStatement stmt = this.connection.prepareStatement("select * from evento where id_eve = ?");
			stmt.setLong(1, id);

			ResultSet rs = stmt.executeQuery();

			if(rs.next()) {
				return populaParticipante(rs);
			}

			rs.close();
			stmt.close();

			return null;
		} catch (SQLException e) {
			throw new RuntimeException(e);
		}
	}
	
	
	private Participante populaParticipante(ResultSet rs) throws SQLException {
		Participante participante = new Participante();
		
		participante.setId(rs.getLong("id_evento"));
	
		return participante;
	}

A tabela do JSP esta assim:

<table border="2" class="sortable">
	<tr>
		<th>Evento</th>
		<th>Data</th>
		<th>Horário</th>
		<th>Participantes</th>
	</tr>
	<c:forEach items="${evento}" var="evento">
	<tr>
		<td>${evento.vaga}</td>
		<td><fmt:formatDate value="${evento.data.time}" pattern="dd/MM"  /> </td>
		<td><fmt:formatDate value="${evento.horario}" pattern="H:mm" /></td>
		<td>${evento.nomecandidato}</td>
		<td><a href="incluiParticipante?evento.id=${evento.id}">Adicionar</a></td>
		<td><a href="mostraEvento?evento.id=${evento.id}">Alterar</a></td>
		<td><a href="removeEvento?evento.id=${evento.id}">Remover</a></td>
	</tr>
	</c:forEach>
</table>

Bem este código não funciona, recebo sempre um null pointer

HTTP Status 500 -

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

java.lang.NullPointerException
	arima.web.action.IncluiParticipanteAction.execute(IncluiParticipanteAction.java:22)

Como resolver esta situação? Como passar o id do evento para a classe participantes? Há algum caminho melhor alem deste que estou tomando?

Obrigado

Criado 3 de abril de 2012
Respostas 0
Participantes 1