Struts Error : org.apache.jasper.JasperException: Cannot find bean SearchResults in scope request"

M

madhu

I am getting the following error when I try to iterate through my VO
in my .jsp file.

"org.apache.jasper.JasperException: Cannot find bean SearchResults in
scope request" where "SearchResults" is the attribute which i set for
my VO.

ok, here is what I am doing. can u please correct me where I am going
wring. I am doing search page and I created a collection for the
search results. I want
to display those results in the SearchResults.jsp

I am attaching my code. This is my logic

1.Blog.java - A bean class for my blog attributes
2.TempBlogArray - A collection of blogs
3.SearchAction.execute - I created a list to store
the TempBlogArray, and I am using
request.setAttribute("SearchResults", List);
4. In my SearchResults.jsp ( I am importing "Blog" ,
then in line 218 i have the logic:iterate code.
where in I am using these lines

<logic:iterate id="blog" name="SearchResults"
scope="request" collection="SearchResults"
<tr align="left"
<td
<bean:write name="blog" scope="page"
property="title"/

5. In place if collection I tried using
type="aBlog", but it is assigning a null value to
the aBlog here and i am getting different errors
here.

6. I also added the scope in my struts-config.xml as


<action path="/SearchResults"
type="SearchResultsAction" name="searchResultsForm"
scope="request" input="/SearchResults.jsp"

Any help regarding this error would be gratly
appreciated.

Thanks,
Madhuri.

Souce Code -
-------------------------------------------------
Blog.java


/**
* Created by IntelliJ IDEA.
* User: Madhuri
* Date: Jul 14, 2003
* Time: 11:11:20 PM
* To change this template use Options | File Templates.
*/
package core;
public class Blog {

long blog_id;
String title;
String description;
String location;
String category;
int rank;
int parent_blog_id;
String message;
String owner;
String create_date;
String update_date;
String blog_type;
int publish_flag;
String publish_date;
int is_atchmt_present;
int Num_of_Threads;

public long getBlog_id() {
return blog_id;
}

public void setBlog_id(long blog_id) {
this.blog_id = blog_id;
}

public String getTitle() {
return title;
}

public void setTitle(String title) {
this.title = title;
}

public String getDescription() {
return description;
}

public void setDescription(String description) {
this.description = description;
}

public String getLocation() {
return location;
}

public void setLocation(String location) {
this.location = location;
}

public String getCategory() {
return category;
}

public void setCategory(String category) {
this.category = category;
}

public int getRank() {
return rank;
}

public void setRank(int rank) {
this.rank = rank;
}

public int getParent_blog_id() {
return parent_blog_id;
}

public void setParent_blog_id(int parent_blog_id) {
this.parent_blog_id = parent_blog_id;
}

public String getMessage() {
return message;
}

public void setMessage(String message) {
this.message = message;
}

public String getOwner() {
return owner;
}

public void setOwner(String owner) {
this.owner = owner;
}

public String getCreate_date() {
return create_date;
}

public void setCreate_date(String create_date) {
this.create_date = create_date;
}

public String getUpdate_date() {
return update_date;
}

public void setUpdate_date(String update_date) {
this.update_date = update_date;
}

public String getBlog_type() {
return blog_type;
}

public void setBlog_type(String blog_type) {
this.blog_type = blog_type;
}

public int getPublish_flag() {
return publish_flag;
}

public void setPublish_flag(int publish_flag) {
this.publish_flag = publish_flag;
}

public String getPublish_date() {
return publish_date;
}

public void setPublish_date(String publish_date) {
this.publish_date = publish_date;
}

public int getIs_atchmt_present() {
return is_atchmt_present;
}

public void setIs_atchmt_present(int is_atchmt_present) {
this.is_atchmt_present = is_atchmt_present;
}
public int getNum_of_Threads() {
return Num_of_Threads;
}

public void setNum_of_Threads(int num_of_Threads) {
Num_of_Threads = num_of_Threads;
}
}
-------------------------------------------------
TempBlogArray.java

/**
* Created by IntelliJ IDEA.
* User: Madhuri
* Date: Jul 14, 2003
* Time: 11:30:06 PM
* To change this template use Options | File Templates.
*/
package core;

import java.util.ArrayList;

public class TempBlogArray {

public ArrayList getBlogList()
{
ArrayList blogList;
blogList = new ArrayList();

Blog aBlog = new Blog();

aBlog.setBlog_id(1);
aBlog.setBlog_type("C");
aBlog.setCategory("Food");
aBlog.setPublish_flag(0);
aBlog.setRank(5);
aBlog.setTitle("Restaurants in San Jose");

blogList.add(0, aBlog);

aBlog.setBlog_id(2);
aBlog.setBlog_type("C");
aBlog.setCategory("Food");
aBlog.setPublish_flag(1);
aBlog.setRank(4);
aBlog.setTitle("Mexican & Japanese Restaurants in San Jose");

blogList.add(1, aBlog);

aBlog.setBlog_id(3);
aBlog.setBlog_type("C");
aBlog.setCategory("Music");
aBlog.setPublish_flag(1);
aBlog.setRank(4);
aBlog.setTitle("classical guitar,San Jose");

blogList.add(2, aBlog);

aBlog.setBlog_id(4);
aBlog.setBlog_type("C");
aBlog.setCategory("Music");
aBlog.setPublish_flag(1);
aBlog.setRank(4);
aBlog.setTitle("Guitar Shows Dying ?");

blogList.add(3, aBlog);

return blogList;
}
}
----------------------------------------------------------------
SearchAction.java


/**
* Created by IntelliJ IDEA.
* User: Madhuri
* Date: Jul 15, 2003
* Time: 12:09:54 AM
* To change this template use Options | File Templates.
*/
import java.io.IOException;
import java.util.*;
import javax.servlet.ServletException;
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.ActionForward;
import org.apache.struts.action.ActionMapping;
import core.*;

public class SearchAction extends Action
{
protected List getSearchResults(String keyword)
{
TempBlogArray blogArray = new TempBlogArray();
List resultBlogList = new ArrayList();
Blog aBlog;

if ( keyword.equalsIgnoreCase("FOOD") )
{
aBlog = (Blog)(blogArray.getBlogList().get(1));
resultBlogList.add(aBlog);
return resultBlogList;
}
return resultBlogList;
}

public ActionForward execute(ActionMapping mapping,ActionForm
form,HttpServletRequest request,
HttpServletResponse response)throws IOException, ServletException
{
List resultList = null;

// Default target to success
String target = new String("success");

if ( form != null )
{
// Use the SearchForm to get the search keyword
SearchForm searchForm = (SearchForm)form;
String keyword = searchForm.getKeyword();
resultList = getSearchResults(keyword);
}

// Set the target to failure
if ( resultList == null )
{
target = new String("failure");
}
else
{
System.out.println("SearchAction: result = " + resultList);
request.setAttribute("SearchResult", resultList);
}

// Forward to the appropriate View
return (mapping.findForward(target));

} // end of execute
}
------------------------------------------------------------
SearchForm.java


/**
* Created by IntelliJ IDEA.
* User: Madhuri
* Date: Jul 15, 2003
* Time: 11:25:52 AM
* To change this template use Options | File Templates.
*/

import javax.servlet.http.HttpServletRequest;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;

public class SearchForm extends ActionForm
{
private String keyword = null;

public String getKeyword()
{
return (keyword);
}

public void setKeyword(String keyword)
{
this.keyword = keyword;
}

public void reset(ActionMapping mapping,HttpServletRequest request)
{
this.keyword = null;
}
}
-----------------------------------------------
SearchResults.jsp ( i am giving only the relevant code here)

<%@ page language="java" %>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic"%>
<%@ page import ="java.util.*" %>
<%@ page import ="core.Blog" %>

<jsp:useBean id="aBlog" class="core.Blog"/>

<%String myKeyword = (String)request.getAttribute("SearchResults");%>

<logic:iterate id="blog" name="SearchResults" scope="request"
collection="<%=request.getAttribute(myKeyword)%>" >
<tr align="left">
<td>
<bean:write name="blog" scope="page"
property="title"/>
</td>

<td>
<bean:write name="blog" scope="page"
property="Num_of_Threads"/>
</td>

<td>
<bean:write name="blog" scope="page"
property="Publish_date"/>
</td>
</tr>

</logic:iterate>

------------------------------------------------------------
struts-config.xml

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD
Struts Configuration 1.1//EN"
"C:\jakarta-struts-1.1-b3\webapps\struts-documentation\dtds\struts-config_1_1.dtd">
<struts-config>
<form-beans>
<form-bean name="lookupForm" type="LookupForm"/>
<form-bean name="searchForm" type="SearchForm"/>
<form-bean name="searchResultsForm" type="SearchResultsForm"/>
</form-beans>
<action-mappings>
<action path="/Lookup" type="LookupAction" name="lookupForm"
input="/index.jsp">
<forward name="success" path="/quote.jsp"/>
<forward name="failure" path="/index.jsp"/>
</action>
<action path="/Search" type="SearchAction" name="searchForm"
input="/Search.jsp">
<forward name="success" path="/SearchResults.jsp"/>
<forward name="failure" path="/Search.jsp"/>
</action>
<action path="/SearchResults" type="SearchResultsAction"
name="searchResultsForm" scope="request" input="/SearchResults.jsp">
<forward name="success" path="/SearchResults.jsp"/>
<forward name="failure" path="/Search.jsp"/>
</action>
</action-mappings>
<message-resources parameter="ApplicationResources"/>
</struts-config>
 
W

Wendy S

madhu said:
"org.apache.jasper.JasperException: Cannot find bean SearchResults in
scope request" where "SearchResults" is the attribute which i set for
my VO.

What do you mean by this? SearchResults is the name you've stored your
Value Object under in scope?
<logic:iterate id="blog" name="SearchResults" scope="request"
collection="<%=request.getAttribute(myKeyword)%>" >

See:
http://jakarta.apache.org/struts/userGuide/struts-logic.html#iterate

I think you're confusing it by using the name and collection attributes
together. Either use name (and property if necessary) or use collection,
but not both.

If you use collection, the RT needs to evaluate to the collection itself.
Otherwise use name and specify the name of some bean that is itself a
collection, or use name/property together.

Alternately, switch to JSTL which will allow you to get rid of the
scriptlet.
 
S

Sudsy

madhu said:
I am getting the following error when I try to iterate through my VO
in my .jsp file.

"org.apache.jasper.JasperException: Cannot find bean SearchResults in
scope request" where "SearchResults" is the attribute which i set for
my VO.

ok, here is what I am doing. can u please correct me where I am going
wring. I am doing search page and I created a collection for the
search results. I want
to display those results in the SearchResults.jsp

I am attaching my code. This is my logic

1.Blog.java - A bean class for my blog attributes
2.TempBlogArray - A collection of blogs
3.SearchAction.execute - I created a list to store
the TempBlogArray, and I am using
request.setAttribute("SearchResults", List);
4. In my SearchResults.jsp ( I am importing "Blog" ,
then in line 218 i have the logic:iterate code.
where in I am using these lines

<logic:iterate id="blog" name="SearchResults"
scope="request" collection="SearchResults"
<tr align="left"
<td
<bean:write name="blog" scope="page"
property="title"/

Use this instead:

<logic:iterate id="blog" name="SearchResults" type="Blog">
<bean:write name="blog" property="title"/>
</logic:iterate>

Then SearchResults will be assumed to be some type of collection
where each element is of type Blog. Works for me!
 

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

No members online now.

Forum statistics

Threads
473,756
Messages
2,569,540
Members
45,025
Latest member
KetoRushACVFitness

Latest Threads

Top