You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@struts.apache.org by Simion Ursache <si...@gmail.com> on 2007/02/03 22:49:31 UTC

Problem with JTable & Struts

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 =>
oracle.jdbc.driver.T4CConnection@19261de
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@157566d]
07/02/03 21:47:38 objectClass=>class databeans.Pontaje
07/02/03 21:47:38 info=>java.beans.GenericBeanInfo@eb203b
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 =>[databeans.Pontaje@157566d]

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);
    }

}