Java Mailing List Archive

http://www.junlu.com/

Home » Home (12/2007) » Struts 2 »

Problem with JTable & Struts

Simion Ursache

2007-02-03


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:

<%@(protected).*"%>
<%@(protected)"%>
<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 =>
oracle.jdbc.driver.T4CConnection@(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 =>[databeans.Pontaje@(protected)]
07/02/03 21:47:38 objectClass=>class databeans.Pontaje
07/02/03 21:47:38 info=>java.beans.GenericBeanInfo@(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;@(protected)
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 =>[databeans.Pontaje@(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);
  }

}
©2008 junlu.com - Jax Systems, LLC, U.S.A.