Tengo un .jsp que abre en tomcat, el cual consiste en una tabla que va mostrando los registros que tengo en una tabla de mi base de datos, agregando al lado derecho un boton de eliminar y otro de modificar para cada registro, de la siguiente forma.
[URL="https://lh3.googleusercontent.com/-OLyvf3blYnI/UI_pzswNk0I/AAAAAAAAAQw/ioY1Uk5UoKw/w497-h373/pantalla.png"]https://lh3.googleusercontent.com/-OLyvf3blYnI/UI_pzswNk0I/AAAAAAAAAQw/ioY1Uk5UoKw/w497-h373/pantalla.png[/URL]
Cuando doy clic en el boton de mas me abre un formulario en el cual puedo agregar mas registros y esto funciona perfectamente, el problema esta en cuando quiero eliminar uno de los registros, el codigo es el siguiente...
Código PHP:
------------------index.jsp--------------------
//aqui para cada elemento de la lista de alumnoBean
//los escribe en la tabla descrita anteriormente
<c:forEach items="${alumnoBean.listaAlumnos}" var="alumnos">
<tr>
<td>
${alumnos.idalumno}
</td>
<td>
${alumnos.nombre}
</td>
<td>
${alumnos.apaterno}
</td>
<td>
${alumnos.amaterno}
</td>
<td>
//////AQUI ES DONDE CREO QUE ESTA EL ERROR
//es el boton de eliminar
<h:commandLink action="#{alumnoBean.delete()}">
<img src="/Evaluacion/faces/recursos/imagenes/delete.gif" alt="Borrar" height="25" width="25" title="Borrar"/>
</h:commandLink>
//////////////////////////////////////////////////////////////////
<img src="/Evaluacion/faces/recursos/imagenes/update.gif" alt="Actualizar" height="25" width="25" title="Actualizar"/>
</td>
</tr>
<c:forEach>
---------------------------------AlumnoDTO--------------
public String selectAll(){ // llena la tabla
listaAlumnos=new AlumnosDAO().selectAll();
return "/alumnosIndex";
}
public String insert(){ // inserta registros
AlumnosDAO alumnodao=new AlumnosDAO();
alumnodao.insert(this);
selectAll();
return "/alumnosIndex";
//Evaluacion/faces/recursos/imagenes/delete.gif
}
public String delete(){ // se supone que deberia eliminar
AlumnosDAO alumnodao=new AlumnosDAO();
alumnodao.deleteById(this);
selectAll();
return "/alumnosIndex";
}
-------------------------------AlumnoDAO-------------------
///////SELECT
public List<IBaseDTO> selectAll(){ //llena la lista
ArrayList<IBaseDTO> arreglo=new ArrayList<IBaseDTO>();
AlumnosDTO alumno = null;
Connection con = null;
PreparedStatement ps = null;
ResultSet rs=null;
try{
con=ConexionDAO.createConnection();
ps=con.prepareStatement(SQL.selectAlumno);
rs=ps.executeQuery();
while(rs.next()){
alumno= new AlumnosDTO();
alumno.setIdalumno(rs.getInt("IDALUMNO"));
alumno.setNombre(rs.getString("NOMBRE"));
alumno.setApaterno(rs.getString("APATERNO"));
alumno.setAmaterno(rs.getString("AMATERNO"));
arreglo.add(alumno);
//arreglo.add(alumno);
}
}catch(Exception ex){
ex.printStackTrace();
}
finally{
ConexionDAO.closeConnection(con, ps, rs);
}
return arreglo;
}
/////////INSERT
public int insert(IBaseDTO alumnodao){ //inserta los registros del formulario a la lista
Connection conn=null;
PreparedStatement ps = null;
AlumnosDTO alumno= null;
int exito=0;
try {
conn=ConexionDAO.createConnection();
ps=conn.prepareStatement(SQL.insertAlumno);
alumno=(AlumnosDTO)alumnodao;
ps.setInt(1,alumno.getIdalumno());
ps.setString(2,alumno.getNombre());
ps.setString(3,alumno.getApaterno());
ps.setString(4,alumno.getAmaterno());
exito=ps.executeUpdate();
if (exito==1) {
System.out.println("Alumno Insertado");
}else{
System.out.println("Alumno no Insertado");
}
}
catch (Exception e) {
e.printStackTrace();
}
finally{
ConexionDAO.closeConnection(conn,ps);
}
return exito;
}
////////DELETE
public int deleteById(IBaseDTO alumnodto){ //debería eliminar el registro seleccionado en la tabla
Connection con =null;
PreparedStatement ps=null;
AlumnosDTO alumno=null;
int exito=0;
//System.out.println("Alumno ID "+alumno.idalumno.toString());
try {
con=ConexionDAO.createConnection();
ps=con.prepareStatement(SQL.deleteAlumno);
alumno=(AlumnosDTO)alumnodto;
ps.setInt(1,alumno.getIdalumno());
exito=ps.executeUpdate();
if (exito==1) {
System.out.println("Alumno Eliminado");
}else{
System.out.println("Alumno no Eliminado");
}
} catch (Exception e) {
e.printStackTrace();
System.out.println(e.toString());
}
finally{
ConexionDAO.closeConnection(con,ps);
}
return exito;
}
-------- SQL--------
//consultas para insertar, seleccionar todo y eliminar registros
public class SQL {
//Alumnos
public static String selectAlumno="SELECT IDALUMNO,NOMBRE,APATERNO,AMATERNO FROM ALUMNOS";
public static String insertAlumno="INSERT INTO ALUMNOS (IDALUMNO,NOMBRE,APATERNO,AMATERNO)VALUES(?,?,?,?)";
public static String deleteAlumno="DELETE FROM ALUMNOS WHERE IDALUMNO=?";
public static String updateAlumno="UPDATE ALUMNOS SET NOMBRE=?,APATERNO=?,AMATERNO=? WHERE IDALUMNO=?";
java.lang.NullPointerException
at DAO.AlumnosDAO.deleteById(AlumnosDAO.java:98)
at DTO.AlumnosDTO.delete(AlumnosDTO.java:135)
según eh investigado estoy pasando un valor nulo como parametro a esos 2 métodos, mas quiero enviarle el id del alumno al momento de dar click en el botón de elilminar.
Los códigos obviamente no están completos, solo son los fragmentos para no poner todo (nombre de paquete, etc...)
Agradecería cualquier punto de vista pues ya tengo atorado con esto 2 dias