Struts Help
HI All,
I am trying to build a page which will diplay data from a specific
table using struts in netbeans 5.0.
I created a dummy page test2.jsp which is the input to the target jsp
file "/loginSuccessful.jsp".
I created a action mapping from test2 -> /loginSuccessful.jsp in my
struts config file
<action input="test2.jsp" name="Jobdisplay" path="/loginSuccessful"
scope="request" type="com.myapp.struts.Jobdisplay">
<forward name="success" path="/loginSuccessful.jsp" />
</action>
Here Jobdisplay is my struts action class :
/*
* Jobdisplay.java
*
* Created on November 22, 2006, 12:33 AM
*/
package com.myapp.struts;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionForward;
import javax.servlet.http.*;
import org.apache.struts.action.*;
import java.sql.*;
import java.util.ArrayList;
import javax.sql.*;
import java.io.PrintStream;
import javax.naming.NamingException;
/**
*
* @author pooja
* @version
*/
public class Jobdisplay extends Action {
private DataSource dataSource;
public ArrayList jobsList = new ArrayList();
/* forward name="success" path="" */
private final static String SUCCESS = "success";
//public Jobdisplay() throws Exception{
// try{
// dataSource = getPoolDB();
//}catch(NamingException e){
// throw new Exception(e.getMessage());
// }
//}
/**
* This is the action called from the Struts framework.
* @param mapping The ActionMapping used to select this instance.
* @param form The optional ActionForm bean for this request.
* @param request The HTTP Request we are processing.
* @param response The HTTP Response we are processing.
* @throws java.lang.Exception
* @return
*/
public ActionForward execute(ActionMapping mapping, ActionForm
form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
// job jobpresent = (job) form;
//private DataSource dataSource;
HttpSession session = request.getSession();
/** Here the method that connects to the datasource is called:
*/
jobsList = getjobs();
if(jobsList != null){
session.setAttribute("alljobs", jobsList);
}
return mapping.findForward(SUCCESS);
}
private ArrayList getjobs(){
Connection conn = null;
Statement stmt = null;
PreparedStatement prpStmt = null;
ResultSet rs = null;
StringBuffer resultString ;
try{
dataSource =
(DataSource)servlet.getServletContext().getAttribute("empTable");
conn = dataSource.getConnection();
//String sqlQuery = "SELECT jobid,jobtitle,applydate FROM
job";
stmt = conn.createStatement();
rs = stmt.executeQuery("select jobid,jobtitle,applydate
from job");
if (conn.isClosed()) {
throw new Exception("error.unexpected");
}
//prpStmt(jobpresent.getJobid());
//while(rs.next()) {
// String jobid = rs.getString(1);
// String jobtitle = rs.getString(2);
//String date=rs.getString(4);
//System.out.println("jobid,jobtitle,date");
//}
//jobpresent.reset(mapping, request);
while (rs.next()) {
jobsList.add(new job(rs.getString(1),
rs.getString(2),rs.getString(4)));
}
rs.close();
}
catch ( SQLException e ) {
System.err.println("SQL Exception occured while accessing
the table" );
e.printStackTrace();
return null;
}
catch ( Exception e ) {
e.printStackTrace();
return null;
}
System.out.println(jobsList.size());
return jobsList;
}
//private javax.sql.DataSource getPoolDB() throws
javax.naming.NamingException {
// javax.naming.Context c = new javax.naming.InitialContext();
//return (javax.sql.DataSource)
c.lookup("java:comp/env/jdbc/poolDB");
//}
}
I added the following code to my target jsp file :
<logic:notPresent name = "alljobs">
<h2>Data source not in scope!</h2>
</logic:notPresent>
<logic:present name = "alljobs">
<p>These are our users:</p>
<table border="1">
<thead>
<tr>
<th>Jobid</th>
<th>Jobtitle</th>
<th>applydate</th>
</tr>
</thead>
<tbody>
<logic:empty name = "alljobs">
<h2>Data source in scope but no data
found!</h2>
</logic:empty>
<logic:iterate id="job" name="alljobs">
<tr>
<td></td>
<td></td>
</tr>
<tr>
<td><bean:message name="job"
key="display.jobid" property="jobid" /></td>
<td><bean:message name="job"
key="display.jobtitle" property="jobtitle" /></td>
<td><bean:message key="display.applydate"
name="job" property="applydate"/></td>
</tr>
</logic:iterate>
</tbody>
</table>
</logic:present>
where job is a simple class with getter/setter methods
/*
* job.java
*
* Created on November 22, 2006, 11:51 PM
*/
package com.myapp.struts;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
/**
*
* @author pooja
* @version
*/
public class job extends org.apache.struts.action.ActionForm {
String jobid;
String jobtitle;
String applydate;
/** Creates a new instance of job */
public job(String jobid,String jobtitle,String applydate) {
this.jobid=jobid;
this.jobtitle=jobtitle;
this.applydate=applydate;
}
public String getJobid() {
return jobid;
}
public void setJobid(String jobid) {
this.jobid = jobid;
}
public String getJobtitle() {
return jobtitle;
}
public void setJobtitle(String jobtitle) {
this.jobtitle = jobtitle;
}
public String getApplydate() {
return applydate;
}
public void setApplydate(String applydate) {
this.applydate = applydate;
}
//public void reset(ActionMapping mapping,HttpServletRequest request)
{
//this.jobid = "";
//this.jobtitle = "";
//this.applydate = "";
//}
public job() {
super();
// TODO Auto-generated constructor stub
}
}
}
After all this I compile and run the project starting from test2.jsp
(which has nothing but one submit button and gets redirected to
loginsuccesfull.jsp)
All I get on my target jsp page is :
login successful
jobid jobtitle applydate
Data source not in scope!
** I am guessing that my Action class is not being called and thus the
session object alljobs is never set thus returning a null to the logic
bean which displays the data source not in scope. I am a newbie to
Struts , Can some one help.
Thanks