Struts Help

S

spooja10

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
 
T

Tim B

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>

This is not an action mapping from test2.jsp to loginSuccessful.jsp. It is a
mapping that defines test2.jsp as the forward path in case of validation
errors. That's what the 'input' attribute does. The action can be called
from anywhere. In order to call the action, you need a form (html:form) in
your test2.jsp with the action as '/loginSuccessful' (though a better name
might be '/attemptLogin')

Also, I'm not sure why you named your form bean "Jobdisplay" since its
purpose is to be populated with the request parameters from the submission
of the login form displayed by test2.jsp. "loginInfo" would be more
suitable. This is not to criticize you naming choices, but to clarify the
functions of these components.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,961
Messages
2,570,131
Members
46,689
Latest member
liammiller

Latest Threads

Top