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