• Post Reply
  • Bookmark Topic Watch Topic
  • New Topic

Cannot find ActionMappings or ActionFormBeans

 
Betsy Camel
Ranch Hand
Posts: 119
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
i am getting the above error when i tried my first struts application.

here is the code. Can anyone help me !

//login.jsp
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>


<body><html:form action = "/login">
Name<html:text property = "name"/>
Password<html:text property = "password"/>
<html:submit property = "submit"/>
</html:form>
</body>
</html>

//gettersActionForm
package strut;
import javax.servlet.http.HttpServletRequest;

import org.apache.struts.*;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
public class gettersActionForm extends ActionForm{

/**
* @param args
*/
String name;
String password;

public void setName(String name){
System.out.println("setting name" +name);
this.name = name;
}
public void setPassword(String password){
this.password = password;
}
public String getName(){

return name;
}
public String getPassword(){
return password;
}

}

//ControlAction

package strut;
import javax.servlet.ServletException;
import javax.servlet.http.*;
import javax.sql.*;
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 java.io.IOException;
import java.sql.*;
public class ControlAction extends Action{

/**
* @param args
*/
public ActionForward perform(ActionMapping map, ActionForm form, HttpServletResponse res, HttpServletRequest req) throws IOException, ServletException{
String target = "";
System.out.println("hello");
String username = ((gettersActionForm)form).getName();
String pwd = ((gettersActionForm)form).getPassword();
System.out.println(username);
System.out.println(pwd);
if(username.equals("laxmi")&&(pwd.equals("laxmi"))){
target = "success";
}
else {
target = "failure";
}
System.out.println("target"+target);
return (map.findForward(target));
}
}


//struts-config.xml

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN"
"http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
<struts-config>
<form-beans>
<form-bean name="gettersActionForm" type="strut.gettersActionForm" />
</form-beans>

<action-mappings>
<action path="/login" name="gettersActionForm" type="strut.ControlAction" scope="request" input="/login.jsp">
<forward name="success" path="/hello.jsp"/>
<forward name="failure" path="/bad.jsp"/>
</action>
</action-mappings>
</struts-config>


//web.xml

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
</servlet>

<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>

<taglib>
<taglib-uri>/WEB-INF/struts-html.tld</taglib-uri>
<taglib-location>/WEB-INF/struts-html.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/WEB-INF/struts-logic.tld</taglib-uri>
<taglib-location>/WEB-INF/struts-logic.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/WEB-INF/struts-bean.tld</taglib-uri>
<taglib-location>/WEB-INF/struts-bean.tld</taglib-location>
</taglib>

</web-app>

the exception -
javax.servlet.jsp.JspException: Cannot find ActionMappings or ActionFormBeans collection
org.apache.struts.taglib.html.FormTag.lookup(FormTag.java:741)
org.apache.struts.taglib.html.FormTag.doStartTag(FormTag.java:443)
org.apache.jsp.login_jsp._jspx_meth_html_form_0(org.apache.jsp.login_jsp:100)
org.apache.jsp.login_jsp._jspService(org.apache.jsp.login_jsp:74)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:99)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:325)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:295)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:245)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
 
Betsy Camel
Ranch Hand
Posts: 119
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
I am unable to find the reason for the above error. Please help
 
Betsy Camel
Ranch Hand
Posts: 119
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
I am unable to find the reason for the above error. Please help
 
Merrill Higginson
Ranch Hand
Posts: 4864
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
This message is an indication that the Struts ActionServlet didn't initialize properly. Look at the entries in your Application Server log that occur when you first start the server or start the Struts application. I suspect you will find some sort of error there that is the root cause of the problem.

Once you find the error, post it here, and we'll help you fix it. The most common error is a parsing error, meaning that Struts can't parse the XML in your struts-config.xml file.
 
Betsy Camel
Ranch Hand
Posts: 119
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
The following is the log found in the server


INFO: validateJarFile(C:\Program Files\Apache Software Foundation\T
apps\Struts\WEB-INF\lib\servlet-api.jar) - jar not loaded. See Serv
section 9.7.2. Offending class: javax/servlet/Servlet.class
log4j:WARN No appenders could be found for logger (org.apache.catal
anagerBase).
log4j:WARN Please initialize the log4j system properly.
Jan 19, 2006 9:38:53 AM org.apache.catalina.loader.WebappClassLoade
File
INFO: validateJarFile(C:\Program Files\Apache Software Foundation\T
apps\test\WEB-INF\lib\servlet-api.jar) - jar not loaded. See Servle
ection 9.7.2. Offending class: javax/servlet/Servlet.class
Jan 19, 2006 9:38:54 AM org.apache.coyote.http11.Http11Protocol sta
INFO: Starting Coyote HTTP/1.1 on http-8000
Jan 19, 2006 9:38:54 AM org.apache.jk.common.ChannelSocket init
INFO: JK2: ajp13 listening on /0.0.0.0:8009
Jan 19, 2006 9:38:54 AM org.apache.jk.server.JkMain start
INFO: Jk running ID=0 time=0/359 config=null
Jan 19, 2006 9:38:54 AM org.apache.catalina.startup.Catalina start
INFO: Server startup in 13266 ms


what does servlet-jar not loaded mean ?
 
shahin Khan
Greenhorn
Posts: 17
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Add servlet api.jar file in ur web-inf/lib folder and then try to execute
Hope it will work out.
Cheers
Shahin
 
Reid M. Pinchback
Ranch Hand
Posts: 775
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Originally posted by Betsy Camel:
The following is the log found in the server
INFO: validateJarFile(C:\Program Files\Apache Software Foundation\T
apps\Struts\WEB-INF\lib\servlet-api.jar) - jar not loaded. See Serv
section 9.7.2. Offending class: javax/servlet/Servlet.class

what does servlet-jar not loaded mean ?


This isn't causing your struts problem. It is a spec violation for you to put one of the J2EE API jars into an application. You are just seeing an info-level logging message warning you that the container saw the jar, but ignored it instead of loadings its classes. It didn't need the classes, and loading could have conflicted with the classes already loaded by the container from its own internal libraries.
 
Betsy Camel
Ranch Hand
Posts: 119
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
I had not added the <load-on-startup> tag in the web.xml . So solved the above problem. But got into another

The application is getting redirected to the login.do file which is blank . Can anyone resolve this .

thanks
Betsy
 
Merrill Higginson
Ranch Hand
Posts: 4864
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
One possible cause of this would be the action class not returning a valid ActionForward. Make sure there's a statement similar to:

return mapping.findForward("xyz");

in your action class.

Then make sure that "xyz" or whatever is defined as either a global or local forward in your struts-config.xml file.
 
Betsy Camel
Ranch Hand
Posts: 119
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
I have placed the code above . Though i have specified all the tags, the application gets directed to the .do file, Please let me know how to resolve this.
 
Merrill Higginson
Ranch Hand
Posts: 4864
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Even though the URI on the page says "login.do", it should actually be displaying either "hello.jsp" or "bad.jsp" depending on whether the login succeeded or failed.

One thing you might do is put the following statement after System.out.println("target"+target); in your Action:

System.out.println("ActionForward: "+ map.findForward(target)));

If you get null, it means the ActionForward wasn't found. If you get anything other than null, the problem is something else.

Another possibility to consider is that hello.jsp or bad.jsp may have malformed html. Use your browser's "view source" option on the blank page to see if there are html tags there that are not being displayed.
[ January 20, 2006: Message edited by: Merrill Higginson ]
 
Deb
Greenhorn
Posts: 2
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
I have the same error. The browser is going to the Lookup.do but the page is blank.

Let me know your resolution... )
 
Betsy Camel
Ranch Hand
Posts: 119
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
hi
thats right. I tried putting a System.out.println in the Action class but it didnt get displayed. Does this mean that control doesnt flow into the action class itself. How do i correct this issue ?
 
Merrill Higginson
Ranch Hand
Posts: 4864
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Change the name of your method in your action class from perform() to execute(). You may be looking at an old copy of the tutorial. In previous versions of Struts, perform() was the name of the method to be overridden in the Action class, but in later versions it's execute()
 
Betsy Camel
Ranch Hand
Posts: 119
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Yep! i have changed perform() to execute(), nut couldnt find any change in the application.
 
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic