Hi there ! I got into a new problem, that i can't fix it. I have a page that i'd like to show all the data from a table in the database, so i am using JTable. If anyone can help me, i would be very gratefull. Thanks in advance !
Here is the JSP: <%@ page import="databeans.*"%> <%@ page import="java.sql.Connection"%> <jsp:useBean id="ss_DatePers" class="databeans.Personal" scope="session"/> <%! ModelJTableGeneralizat modelDate=null;%> <% // initializez modelul de date cu pontajul angajatului curent selectat Connection conn=Utilitati.getConexiune(); System.out.println("pontajebody->conn =>" + conn); System.out.println("pontajebody->ss_DatePers.getMarca() =>" + ss_DatePers.getMarca()); System.out.println("pontajebody->luna =>" + request.getParameter("luna")); String filtruDate=" where marca="+ss_DatePers.getMarca()+" and to_char(data,'mm')='"+request.getParameter("luna")+"' order by data"; java.util.ArrayList datePontaj = ObiectPersistent.getObjects(Pontaje.class ,conn,filtruDate); System.out.println("pontajebody->datePontaj =>" + datePontaj); modelDate = new ModelJTableGeneralizat(Pontaje.class,datePontaj,conn); System.out.println("pontajebody->modelDate =>" + datePontaj); conn.close(); request.getSession().setAttribute("ss_ModelDatePontaje",modelDate); %> <html:form action="/pontajAction" > <TABLE width='180' border='0.2'> <tr> <% for (int k=0;k<modelDate.getColumnCount();k++) {%> <td align="center"> <%=modelDate.getColumnName(k).toUpperCase()%> </td> <%}%> </TR> <% for (int i=0;i<modelDate.getRowCount();i++){%> <TR> <% for (int k=0;k<modelDate.getColumnCount();k++) {%> <td> <INPUT type='text' size='10' name="valoare_<%=i+"_"+k%>" value="<%=modelDate.getValueAt(i,k)%>" <%=(k==0||k==1)?"readonly='true'":" "%> > </td> <%}%> </TR> <%}%> </TABLE> <html:submit property="save" value="Salveaza Modificari"/> </html:form> When this page load i get an error message in the log: 07/02/03 21:47:38 pontajebody->conn => [EMAIL PROTECTED] 07/02/03 21:47:38 pontajebody->ss_DatePers.getMarca() =>101 07/02/03 21:47:38 pontajebody->luna =>02 07/02/03 21:47:38 pontajebody->datePontaj =>[EMAIL PROTECTED] 07/02/03 21:47:38 objectClass=>class databeans.Pontaje 07/02/03 21:47:38 info=>[EMAIL PROTECTED] 07/02/03 21:47:38 listaAtributePersistente{} 07/02/03 21:47:38 atribut =>>protected java.math.BigDecimal databeans.Pontaje.activid 07/02/03 21:47:38 atribut =>>protected java.sql.Timestamp databeans.Pontaje.data 07/02/03 21:47:38 atribut =>>protected java.math.BigDecimal databeans.Pontaje.marca 07/02/03 21:47:38 atribut =>>protected java.math.BigDecimal databeans.Pontaje.oreabsnem 07/02/03 21:47:38 atribut =>>protected java.math.BigDecimal databeans.Pontaje.oreco 07/02/03 21:47:38 atribut =>>protected java.math.BigDecimal databeans.Pontaje.orelucrate 07/02/03 21:47:38 listaAtribute[Ljava.beans.PropertyDescriptor;@911fb5 07/02/03 21:47:38 objectClass.getName() = Pontaje 07/02/03 21:47:38 java.lang.NullPointerException 07/02/03 21:47:38 at databeans.ModelJTableGeneralizat.loadAtributePersistente( ModelJTableGeneralizat.java:81) 07/02/03 21:47:38 at databeans.ModelJTableGeneralizat.<init>( ModelJTableGeneralizat.java:49) 07/02/03 21:47:38 at _tiles._bodys._PontajeBody._jspService(_PontajeBody.java:76) 07/02/03 21:47:38 at com.orionserver.http.OrionHttpJspPage.service( OrionHttpJspPage.java:59) 07/02/03 21:47:38 at oracle.jsp.runtimev2.JspPageTable.service( JspPageTable.java:453) 07/02/03 21:47:38 at oracle.jsp.runtimev2.JspServlet.internalService( JspServlet.java:591) 07/02/03 21:47:38 at oracle.jsp.runtimev2.JspServlet.service( JspServlet.java:515) 07/02/03 21:47:38 at javax.servlet.http.HttpServlet.service( HttpServlet.java:856) 07/02/03 21:47:38 at com.evermind.server.http.ServletRequestDispatcher.invoke( ServletRequestDispatcher.java:711) 07/02/03 21:47:38 at com.evermind.server.http.ServletRequestDispatcher.forwardInternal( ServletRequestDispatcher.java:368) 07/02/03 21:47:38 at com.evermind.server.http.HttpRequestHandler.doProcessRequest( HttpRequestHandler.java:866) 07/02/03 21:47:38 at com.evermind.server.http.HttpRequestHandler.processRequest( HttpRequestHandler.java:448) 07/02/03 21:47:38 at com.evermind.server.http.HttpRequestHandler.serveOneRequest( HttpRequestHandler.java:216) 07/02/03 21:47:38 at com.evermind.server.http.HttpRequestHandler.run( HttpRequestHandler.java:117) 07/02/03 21:47:38 at com.evermind.server.http.HttpRequestHandler.run( HttpRequestHandler.java:110) 07/02/03 21:47:38 at oracle.oc4j.network.ServerSocketReadHandler$SafeRunnable.run( ServerSocketReadHandler.java:260) 07/02/03 21:47:38 at oracle.oc4j.network.ServerSocketAcceptHandler.procClientSocket( ServerSocketAcceptHandler.java:239) 07/02/03 21:47:38 at oracle.oc4j.network.ServerSocketAcceptHandler.access$700( ServerSocketAcceptHandler.java:34) 07/02/03 21:47:38 at oracle.oc4j.network.ServerSocketAcceptHandler$AcceptHandlerHorse.run( ServerSocketAcceptHandler.java:880) 07/02/03 21:47:38 at com.evermind.util.ReleasableResourcePooledExecutor$MyWorker.run( ReleasableResourcePooledExecutor.java:303) 07/02/03 21:47:38 at java.lang.Thread.run(Thread.java:595) 07/02/03 21:47:38 pontajebody->modelDate =>[EMAIL PROTECTED] and this message on the page : java.lang.NullPointerException at databeans.ModelJTableGeneralizat.getColumnName( ModelJTableGeneralizat.java:105) at _tiles._bodys._PontajeBody._jspService(_PontajeBody.java:93) [/tiles/bodys/PontajeBody.jsp] at com.orionserver[Oracle Containers for J2EE 10g (10.1.3.1.0) ].http.OrionHttpJspPage.service(OrionHttpJspPage.java:59) at oracle.jsp.runtimev2.JspPageTable.service(JspPageTable.java:453) at oracle.jsp.runtimev2.JspServlet.internalService(JspServlet.java:591) at oracle.jsp.runtimev2.JspServlet.service(JspServlet.java:515) at javax.servlet.http.HttpServlet.service(HttpServlet.java:856) at com.evermind[Oracle Containers for J2EE 10g (10.1.3.1.0) ].server.http.ServletRequestDispatcher.invoke(ServletRequestDispatcher.java :711) at com.evermind[Oracle Containers for J2EE 10g (10.1.3.1.0) ].server.http.ServletRequestDispatcher.forwardInternal( ServletRequestDispatcher.java:368) at com.evermind[Oracle Containers for J2EE 10g (10.1.3.1.0) ].server.http.HttpRequestHandler.doProcessRequest(HttpRequestHandler.java :866) at com.evermind[Oracle Containers for J2EE 10g (10.1.3.1.0) ].server.http.HttpRequestHandler.processRequest(HttpRequestHandler.java:448) at com.evermind[Oracle Containers for J2EE 10g (10.1.3.1.0) ].server.http.HttpRequestHandler.serveOneRequest(HttpRequestHandler.java :216) at com.evermind[Oracle Containers for J2EE 10g (10.1.3.1.0) ].server.http.HttpRequestHandler.run(HttpRequestHandler.java:117) at com.evermind[Oracle Containers for J2EE 10g (10.1.3.1.0) ].server.http.HttpRequestHandler.run(HttpRequestHandler.java:110) at oracle.oc4j.network.ServerSocketReadHandler$SafeRunnable.run( ServerSocketReadHandler.java:260) at oracle.oc4j.network.ServerSocketAcceptHandler.procClientSocket( ServerSocketAcceptHandler.java:239) at oracle.oc4j.network.ServerSocketAcceptHandler.access$700( ServerSocketAcceptHandler.java:34) at oracle.oc4j.network.ServerSocketAcceptHandler$AcceptHandlerHorse.run( ServerSocketAcceptHandler.java:880) at com.evermind[Oracle Containers for J2EE 10g (10.1.3.1.0) ].util.ReleasableResourcePooledExecutor$MyWorker.run( ReleasableResourcePooledExecutor.java:303) at java.lang.Thread.run(Thread.java:595) My JTable class is : package databeans; import java.beans.PropertyDescriptor; import java.lang.reflect.Field; import java.lang.reflect.Modifier; import java.sql.*; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import javax.swing.table.AbstractTableModel; public class ModelJTableGeneralizat extends AbstractTableModel { private ArrayList listaObiecte = new ArrayList(); private PropertyDescriptor[] listaAtribute; private Class clasaObiect; public Connection conexiune; public ModelJTableGeneralizat(Class objectClass, String whereClause, Connection conn) { try { this.conexiune = conn; this.clasaObiect = objectClass; this.listaObiecte = ObiectPersistent.getObjects(objectClass, conexiune, whereClause); this.loadAtributePersistente(objectClass); } catch (Exception e) { e.printStackTrace(); } } public ModelJTableGeneralizat(Class objectClass, ArrayList setObiecte, Connection conn) throws SQLException { try { this.conexiune = conn; } catch (Exception e) { e.printStackTrace(); } this.clasaObiect = objectClass; this.listaObiecte = setObiecte; System.out.println("objectClass=>"+objectClass); this.loadAtributePersistente(objectClass); } private void loadAtributePersistente(Class objectClass) throws SQLException { java.beans.BeanInfo info = null; try { info = java.beans.Introspector.getBeanInfo(objectClass, objectClass.getSuperclass ()); System.out.println("info=>" +info); } catch (java.beans.IntrospectionException e) { e.printStackTrace(System.out); System.out.println("Exceptie !!!!!!!"); } PropertyDescriptor[] toateAtributele = info.getPropertyDescriptors (); // extragem doar atributele non-transient intr-un hashmap a carui cheie va fi numele atributului HashMap listaAtributePersistente = new java.util.HashMap(); System.out.println ("listaAtributePersistente"+listaAtributePersistente); Statement stmt = null; try { for (int i = 0; i < toateAtributele.length; i++) { Field atribut = objectClass.getDeclaredField (toateAtributele[i].getName()); System.out.println("atribut =>>"+atribut); if (!Modifier.isTransient(atribut.getModifiers())) listaAtributePersistente.put(toateAtributele[i].getName().toLowerCase(), toateAtributele[i]); } this.listaAtribute = new PropertyDescriptor[listaAtributePersistente.size()]; System.out.println("listaAtribute"+listaAtribute); // aranjam atributele in ordinea definita de tabela stmt= conexiune.createStatementp; System.out.println("objectClass.getName() = " +objectClass.getName().substring(objectClass.getName().lastIndexOf('.')+1)); ResultSet rs = stmt.executeQuery("select * from " + objectClass.getName ().substring(objectClass.getName().lastIndexOf('.') + 1) + " where rowid=null "); ResultSetMetaData rsMeta = rs.getMetaData(); // va returna coloanele in ordinea definita de tabela int nrColoane = rsMeta.getColumnCount(); int k = -1; for (int i = 1; i <= nrColoane; i++) if (listaAtributePersistente.get(rsMeta.getColumnName(i).toLowerCase()) != null) { k++; this.listaAtribute[k] = (PropertyDescriptor)listaAtributePersistente.get(rsMeta.getColumnName (i).toLowerCase()); } stmt.close(); } catch (Exception e) { if (stmt != null) stmt.close(); e.printStackTrace(System.out); } } public String getColumnName(int columnIndex) { return this.listaAtribute[columnIndex].getName(); } public int getColumnCount() { return this.listaAtribute.length; } public int getRowCount() { return this.listaObiecte.size(); } public Class getColumnClass(int columnIndex) { return this.listaAtribute[columnIndex].getPropertyType(); } public Object getValueAt(int rowIndex, int columnIndex) { // valoarea o preluam prin invocarea metodei get a atributului corespunzator coloanei try { Object objCurent = this.listaObiecte.get(rowIndex); return this.listaAtribute[columnIndex].getReadMethod().invoke(objCurent, null); } catch (Exception e) { e.printStackTrace(); return null; } } public void setValueAt(Object valNoua, int rowIndex, int columnIndex) { Object[] argumente = { valNoua }; Object objCurent = this.listaObiecte.get(rowIndex); ; try { this.listaAtribute[columnIndex].getWriteMethod().invoke(objCurent, argumente); } catch (Exception e) { e.printStackTrace(); } } public boolean isCellEditable(int rowIndex, int columnIndex) { return true; } // metode pt. gestionarea aspectelortranzac(ionale ale modelului public Object getObiectFromLinie(int rowIndex) { return this.listaObiecte.get(rowIndex); } public void addObiectNou() throws Exception { Object obiectNou = this.clasaObiect.newInstance(); ; this.listaObiecte.add(obiectNou); } public void removeObiectFromLinie(int rowIndex) throws Exception { ObiectPersistent obiect = (ObiectPersistent)this.listaObiecte.get(rowIndex); if (obiect.getStare() != ObiectPersistent.NOU) // daca e NOU il scot doar din lista { obiect.setStare(ObiectPersistent.STERS); obiect.salveaza(this.conexiune); } this.listaObiecte.remove(obiect); } public void salveazaModificariPtLinia(int rowIndex) throws Exception { ObiectPersistent obiect = (ObiectPersistent)this.listaObiecte.get(rowIndex); obiect.salveaza(this.conexiune); } public void refreshObiectPtLinia(int rowIndex) throws Exception { ObiectPersistent obiect = (ObiectPersistent)this.listaObiecte.get(rowIndex); obiect.refresh(this.conexiune); } public void anuleazaModificariPtLinia(int rowIndex) throws Exception { ObiectPersistent obiect = (ObiectPersistent)this.listaObiecte.get(rowIndex); if (obiect.getStare() == ObiectPersistent.NOU) this.listaObiecte.remove(obiect); else obiect.refresh(this.conexiune); } public boolean isLinieModificata(int rowIndex) { ObiectPersistent obiect = (ObiectPersistent)this.listaObiecte.get(rowIndex); if (obiect.getStare() == ObiectPersistent.SINCRONIZAT) return false; else return true; } public void saveAll() throws Exception { Iterator i = this.listaObiecte.iterator(); while (i.hasNext()) ((ObiectPersistent)i.next()).salveaza(this.conexiune); } }