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