Boa noite a todos. Estou com a seguinte dificuldade no desenvolvimento de um sistema
Tenho Uma Classe Médico e uma Especialidade, do relacionamento das duas surge um terceira tabela MedicoEspecialidade contendo o cpf do medico e o codigo da especialidade, onde um medico pode ter varias especialidades.
Toda vez que eu cadastrar um médico no sistema preciso recuperar as especialidades que ele possui e gravar seu cpf e o codigo da especialidade na tabela MedicoEspecialidade. Meus codigos.
medico.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<link rel="stylesheet" type="text/css" href="modelos/estilo.css">
<script type="text/javascript" src="modelos/validacaoHeranca.js"></script>
<script type="text/javascript" src="modelos/ajax.js"></script>
<title>SINTHOS - Sistema de Internações Hospitalares</title>
</head>
<body>
<div class="principal">
<div class="cabecalho"></div>
<div class="aba">
<a href="atendimento.jsp"><img src="imagens/aba_cadastro1.png" border="0"></a><img src="imagens/aba_cadastro2.png"><a href="relatorios.jsp"><img src="imagens/aba_cadastro3.png" border="0"></a>
</div>
<div class="conteudo">
<center>
<form name="formMedico" id="formMedico" method="post" action="medico.do">
<table>
<tr>
<td><font color="red">* </font>CPF: </td>
<td><input type="text" name="cpf" id="cpf" class="dados" maxlength="14" onkeypress="return campoNumerico(event)" onkeyup="mascaraCpf(this,event)" onblur="buscarMedico(this.value)"/></td>
</tr>
<tr>
<td><font color="red">* </font>CRM: </td>
<td><input type="text" name="crm" id="crm" class="dados" maxlength="5" onkeypress="return campoNumerico(event)"/></td>
</tr>
<tr>
<td><font color="red">* </font>RG: </td>
<td><input type="text" name="rg" id="rg" class="dados" maxlength="15" onchange="this.value=this.value.toUpperCase();"/></td>
</tr>
<tr>
<td><font color="red">* </font>Nome: </td>
<td><input type="text" name="nome" id="nome" class="texto" onkeydown="tamanhoMaximo(this,50)" onchange="this.value=this.value.toUpperCase();"/></td>
</tr>
<tr>
<td><font color="red">* </font>Endereço: </td>
<td><input type="text" name="endereco" id="endereco" class="texto" onkeydown="tamanhoMaximo(this,50)" onchange="this.value=this.value.toUpperCase();"/></td>
</tr>
<tr>
<td><font color="red">* </font>Número: </td>
<td><input type="text" name="numero" id="numero" class="texto" onkeydown="tamanhoMaximo(this,10)" onchange="this.value=this.value.toUpperCase();"/></td>
</tr>
<tr>
<td>Bairro: </td>
<td><input type="text" name="bairro" id="bairro" class="texto" onkeydown="tamanhoMaximo(this,50)" onchange="this.value=this.value.toUpperCase();"/></td>
</tr>
<tr>
<td><font color="red">* </font>Cidade: </td>
<td><input type="text" name="cidade" id="cidade" class="texto" onkeydown="tamanhoMaximo(this,50)" onchange="this.value=this.value.toUpperCase();"/></td>
</tr>
<tr>
<td>CEP: </td>
<td><input type="text" name="cep" id="cep" class="dados" maxlength="9" onkeypress="return campoNumerico(event)" onkeyup="mascaraCep(this,event)"/></td>
</tr>
<tr>
<td><font color="red">* </font>Estado: </td>
<td><input type="text" name="estado" id="estado" class="texto" onkeydown="tamanhoMaximo(this,50)" onchange="this.value=this.value.toUpperCase();"/></td>
</tr>
<tr>
<td>Telefone: </td>
<td><input type="text" name="telefone" id="telefone" class="dados" maxlength="13" onkeypress="return campoNumerico(event)" onkeyup="mascaraTelefone(this)"/></td>
</tr>
<table>
<tr>
<td><input type="checkbox" name="especialidade" id="especialidade" value="1"/>ALERGOLOGIA</td>
<td><input type="checkbox" name="especialidade" id="especialidade" value="2"/>ANATOMIA PATOLOGICA</td>
<td><input type="checkbox" name="especialidade" id="especialidade" value="3"/>ANESTESIOLOGIA</td>
<td><input type="checkbox" name="especialidade" id="especialidade" value="4"/>ANGIOLOGIA </td>
</tr>
</table>
<tr>
<td></td>
<td><font color="red">*</font> Campos Obrigatórios.</td>
</tr>
</table>
<br/>
<!--<img src="imagens/botaoAnterior.png"> <input type="text" name="navegar" id="navegar" size="4" disabled="disabled"/> <img src="imagens/botaoProximo.png"/>!-->
<br/>
<table>
<tr>
<td>
<input type="button" class="botao" name="acao" value="Salvar" onclick="salvarDados('formMedico','medico')"/>
<input type="submit" class="botao" name="acao" value="Excluir"/>
<input type="reset" class="botao" name="acao" value="Limpar"/>
</td>
</tr>
</table>
</form>
</center>
</div>
<br/><br/><br/><br/><br/>
<a href="cadastros.jsp"><img src="imagens/botaoVoltar.png" border="0"/></a> <img align="right" src="imagens/medico.png"/>
<div class="rodape">Copyrigth by SINTHOS.</div>
</div>
</body>
</html>
Classe MedicoCTR(Servlet)
package sinthos.ctr;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import sinthos.bean.Medico;
import sinthos.bean.MedicoEspecialidade;
import sinthos.dao.MedicoDAO;
import sinthos.dao.MedicoEspecialidadeDAO;
public class MedicoCTR extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {
static final long serialVersionUID = 1L;
public MedicoCTR() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
PrintWriter saida = response.getWriter();
String cpf = request.getParameter("cpf");
saida.print(geraXML(cpf));
saida.close();
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//Defini o tipo de resposta
response.setContentType("text/xml");
response.setCharacterEncoding("ISO-8859-1");
//Cria os objetos e variaveis
MedicoEspecialidade medicoEspecialidade = new MedicoEspecialidade();
MedicoEspecialidadeDAO daoMedicoEspecialidade = new MedicoEspecialidadeDAO();
Medico medico = new Medico();
MedicoDAO daoMedico = new MedicoDAO();
PrintWriter saida = response.getWriter();
String acao = request.getParameter("acao");
//Recupera da tela
medico.setCpf(request.getParameter("cpf"));
medico.setCrm(Integer.parseInt(request.getParameter("crm")));
medico.setRg(request.getParameter("rg"));
medico.setNome(request.getParameter("nome"));
medico.setEndereco(request.getParameter("endereco"));
medico.setNumero(request.getParameter("numero"));
medico.setBairro(request.getParameter("bairro"));
medico.setCidade(request.getParameter("cidade"));
medico.setCep(request.getParameter("cep"));
medico.setEstado(request.getParameter("estado"));
medico.setTelefone(request.getParameter("telefone"));
//Ação dos botões
if(acao.equals("Excluir")){
daoMedicoEspecialidade.excluirMedicoEspecialidade(medico.getCpf());
daoMedico.excluirMedico(medico.getCpf());
request.getRequestDispatcher("mensagemOk.jsp").forward(request, response);
}else{
medico = daoMedico.salvarMedico(medico);
//Cria uma lista e recupera as especialidades selecionadas
String[] especialidades = request.getParameterValues("especialidade");
for(String especialidade : especialidades){
String especialidadeTexto = especialidade;
int especialidadeValor = Integer.parseInt(especialidadeTexto);
medicoEspecialidade.setCodigoEspecialidade(especialidadeValor);
medicoEspecialidade.setCpf(request.getParameter("cpf"));
medicoEspecialidade = daoMedicoEspecialidade.salvarMedicoEspecialidade(medicoEspecialidade);
}
if(medico == null){
saida.print("<msg>Problemas ao salvar o medico no sistema.</msg>");
}else{
saida.print("<msg>Medico salvo com sucesso.</msg>");
}
saida.close();
}
}
private StringBuffer geraXML(String cpf){
MedicoDAO daoMedico = new MedicoDAO();
Medico medico = daoMedico.getMedicoPorCpf(cpf);
StringBuffer xml = new StringBuffer();
if(medico != null){
xml.append("<medico>");
xml.append("<cpf>"+medico.getCpf()+"</cpf>");
xml.append("<crm>"+medico.getCrm()+"</crm>");
xml.append("<rg>"+medico.getRg()+"</rg>");
xml.append("<nome>"+medico.getNome()+"</nome>");
xml.append("<endereco>"+medico.getEndereco()+"</endereco>");
xml.append("<numero>"+medico.getNumero()+"</numero>");
xml.append("<bairro>"+medico.getBairro()+"</bairro>");
xml.append("<cidade>"+medico.getCidade()+"</cidade>");
xml.append("<cep>"+medico.getCep()+"</cep>");
xml.append("<estado>"+medico.getEstado()+"</estado>");
xml.append("<telefone>"+medico.getTelefone()+"</telefone>");
xml.append("</medico>");
}
return xml;
}
}
Da linha 60 até a 67 estou tentando criar um array com os valores dos checkbox, crio um for que pra cada valor passo para inteiro e tento guardar a especialidade e o cpf na tabela MedicoEspecialidade mas encontro o seguinte erro:
java.lang.NullPointerException
sinthos.ctr.MedicoCTR.doPost(MedicoCTR.java:64)
javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
O médico salva normalmente apenas a tabela MedicoEspecialidade não salva. Alguem sabe me dizer o que estou fazendo de errado.
Desde ja, muito obrigado a todos.