Re:"Cannot find ActionMappings or ActionFormBeans collection"

6 respostas
joca_java

Saca um web.xml que eu tinha…

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE web-app
  PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"
  "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">

<web-app>
  <display-name>Sistema de Geração</display-name>
  
  <!-- Standard Action Servlet Configuration (with debugging) -->
  <servlet>
    <servlet-name>action</servlet-name>
    <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
    <!-- servlet-class>
         org.apache.struts.tiles.ActionComponentServlet
    </servlet-class -->

    <init-param>
      <param-name>config</param-name>
      <param-value>/WEB-INF/struts-config.xml</param-value>
    </init-param>
    <init-param>
      <param-name>debug</param-name>
      <param-value>2</param-value>
    </init-param>
    <init-param>
      <param-name>detail</param-name>
      <param-value>2</param-value>
    </init-param>
    <load-on-startup>2</load-on-startup>
  </servlet>


  <!-- Standard Action Servlet Mapping -->
  <servlet-mapping>
    <servlet-name>action</servlet-name>
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>


  <!-- The Usual Welcome File List -->
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>


  <!-- Struts Tag Library Descriptors -->
  <taglib>
    <taglib-uri>/tags/struts-bean</taglib-uri>
    <taglib-location>/WEB-INF/struts-bean.tld</taglib-location>
  </taglib>

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

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

  <taglib>
    <taglib-uri>/tags/struts-nested</taglib-uri>
    <taglib-location>/WEB-INF/struts-nested.tld</taglib-location>
  </taglib>

  <taglib>
    <taglib-uri>/tags/struts-tiles</taglib-uri>
    <taglib-location>/WEB-INF/struts-tiles.tld</taglib-location>
  </taglib>

  <!-- JSTL tag lib descriptors -->
  <taglib>
    <taglib-uri>http://java.sun.com/jstl/fmt</taglib-uri>
    <taglib-location>/WEB-INF/fmt.tld</taglib-location>
  </taglib>

  <taglib>
    <taglib-uri>http://java.sun.com/jstl/fmt-rt</taglib-uri>
    <taglib-location>/WEB-INF/fmt-rt.tld</taglib-location>
  </taglib>

  <taglib>
    <taglib-uri>http://java.sun.com/jstl/core</taglib-uri>
    <taglib-location>/WEB-INF/c.tld</taglib-location>
  </taglib>
  
  <taglib>
    <taglib-uri>http://java.sun.com/jstl/core-rt</taglib-uri>
    <taglib-location>/WEB-INF/c-rt.tld</taglib-location>
  </taglib>
  
  <taglib>
    <taglib-uri>http://java.sun.com/jstl/sql</taglib-uri>
    <taglib-location>/WEB-INF/sql.tld</taglib-location>
  </taglib>
  
  <taglib>
    <taglib-uri>http://java.sun.com/jstl/sql-rt</taglib-uri>
    <taglib-location>/WEB-INF/sql-rt.tld</taglib-location>
  </taglib>
  
  <taglib>
    <taglib-uri>http://java.sun.com/jstl/x</taglib-uri>
    <taglib-location>/WEB-INF/x.tld</taglib-location>
  </taglib>
  
  <taglib>
    <taglib-uri>http://java.sun.com/jstl/x-rt</taglib-uri>
    <taglib-location>/WEB-INF/x-rt.tld</taglib-location>
  </taglib>

  <!-- Ending tag lib descriptors -->

  <!-- Pager Tag Library Descriptors -->
  <taglib>
    <!-- <taglib-uri>http://jsptags.com/tags/navigation/pager</taglib-uri> -->
    <taglib-uri>/tags/pager</taglib-uri>
    <taglib-location>/WEB-INF/pager-taglib.tld</taglib-location>
  </taglib>
</web-app>

Tem coisa faltando nesse teu ai… e coisa com nome diferente… qq coisa copia e cola… claro que fazendo as devidas modificações.

Espero ter ajudado.

6 Respostas

ramilani12

veja esse link o motivo do erro

http://www.geocities.com/Colosseum/Field/7217/SW/struts/errors.html

ramilani12

Aquele link acima tem a solução…

Luiz_Rocha

Saudações

Estou aprendendo a usar o framework Struts. Já consegui uma boa carga teórica, mas não consigo rodar nem uma única aplicação! No meu caso, estou tentando fazer uma simples aplicação de login com acesso a um JavaBean que "imita um banco de dados", e apesar de ter feito conscientemente, tudo nos conformes, me vem o Tomcat com essa desgastante mensagem de erro que já me persegue há vários dias:

[color=darkblue] exception

javax.servlet.ServletException: Cannot find ActionMappings or ActionFormBeans collection
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:848 )
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:781)
org.apache.jsp.index_jsp._jspService(org.apache.jsp.index_jsp:119)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:322)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

root cause

javax.servlet.jsp.JspException: Cannot find ActionMappings or ActionFormBeans collection
org.apache.struts.taglib.html.FormTag.lookup(FormTag.java:798 )
org.apache.struts.taglib.html.FormTag.doStartTag(FormTag.java:506)
org.apache.strutsel.taglib.html.ELFormTag.doStartTag(ELFormTag.java:324)
org.apache.jsp.index_jsp._jspx_meth_html_form_0(org.apache.jsp.index_jsp:226)
org.apache.jsp.index_jsp._jspService(org.apache.jsp.index_jsp:108 )
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:322)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
[/color]

Passei alguns dias procurando pela web, e encontrei muita gente enfrentando esse mesmo tipo de problema - e muita gente sugerindo as mais diversas soluções (desde algumas prudentes até outras bem gambiarrísticas ) . Tentei quase todas, mas o erro persiste.

Para economizar tempo, coloco logo o meu código.

web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN" "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">

<web-app>
	
	<display-name>Hello World com login - em Struts</display-name>
	
	<servlet>
		<servlet-name>actionservlet</servlet-name>
		<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
		<init-param>
			<param-name>configurationes</param-name>
			<param-value>/WEB-INF/struts-config.xml</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>
	
	<servlet-mapping>
		<servlet-name>actionservlet</servlet-name>
		<url-pattern>*.do</url-pattern>
	</servlet-mapping>
	
	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>
	
	<!-- Taglibs do JSTL -->
	<taglib>
		<taglib-uri>jstl-c</taglib-uri>
		<taglib-location>/WEB-INF/c.tld</taglib-location>
	</taglib>
	<taglib>
		<taglib-uri>jstl-fmt</taglib-uri>
		<taglib-location>/WEB-INF/fmt.tld</taglib-location>
	</taglib>
	<!-- Taglibs do Struts -->
	<taglib>
		<taglib-uri>struts-bean-el</taglib-uri>
		<taglib-location>/WEB-INF/struts-bean-el.tld</taglib-location>
	</taglib>
	<taglib>
		<taglib-uri>struts-html-el</taglib-uri>
		<taglib-location>/WEB-INF/struts-html-el.tld</taglib-location>
	</taglib>
	<taglib>
		<taglib-uri>struts-logic-el</taglib-uri>
		<taglib-location>/WEB-INF/struts-logic-el.tld</taglib-location>
	</taglib>
	
</web-app>
struts-config.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!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="formLogin" type="com.gmail.homemletra.LoginFormBean"/>
	</form-beans>
	
	<action-mappings>
		<action path="/login"
				type="com.gmail.homemletra.LoginAction"
				name="formLogin"
				scope="request"
				validate="true"
				input="/index.jsp">
				<forward name="sucesso" path="/sucesso.jsp"/>
				<forward name="falha" path="/index.jsp"/>
		</action>
	</action-mappings>
	
        <!--Copiado de codigo alheio (dos outros)-->
	<controller processorClass="org.apache.struts.action.RequestProcessor" />
	
	<message-resources null="false" parameter="com.gmail.homemletra.Recursos"/>
	
</struts-config>
index.jsp:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<%@taglib prefix="fmt" uri="jstl-fmt"%>
<%@taglib prefix="html" uri="struts-html-el"%>

<html>
	<fmt:setBundle basename="Recursos"/>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
		<title><fmt:message key="index.titulo"/></title>
	</head>
	<body>
		<center>
		<fmt:message key="index.form" />
		<br>
		<html:errors property="naoreg"/>
		<html:errors property="senhawrong"/>
		<hr>
		<html:form action="/login" method="GET">
			<%-- campo do nome de usuário --%>
			<fmt:message key="index.form.nome"/>
			<html:text property="nomeUsuario" size="15" maxlength="15"/>
			<html:errors property="erronome"/><!-- vazio ou muito pequeno -->
			<br>
			<%-- campo da senha --%>
			<fmt:message key="index.form.senha"/>
			<html:text property="senhaUsuario" size="15" maxlength="15"/>
			<html:errors property="errosenha"/><!-- vazio ou muito pequeno -->
			<br>
			<html:submit><fmt:message key="index.submit"/></html:submit>
		</html:form>
		</center>
	</body>
</html>
logado.jsp:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<%@taglib prefix="fmt" uri="jstl-fmt"%>
<%@taglib prefix="html" uri="struts-html-el"%>
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
		<title><fmt:message key="sucesso.titulo"/></title>
	</head>
	<body>
		<fmt:message key="sucesso.saudacao">
			<fmt:param value='${requestScope.atributoNome}'/>
		</fmt:message>
		
		<hr><br>
		
		<center>
		<H3><fmt:message key="sucesso.comemoracao"/></H3>
		</center>
	</body>
</html>
E, pra garantir, tá aqui, logo, a árvore de diretórios:
domistruts
       |
       |---META-INF
       |
       |---WEB-INF
       |         |
       |         |--classes / com.gmail.homemletra / { LoginAction; LoginFormBean; LoginBean; Recursos }
       |         |
       |         |--lib / um monte de arquivos .jar
       |         |
       |         |-- arquivos .tld
       |         |
       |         |--web.xml
       |         |
       |         |--struts-config.xml
       |
Já verifiquei várias vezes meu web.xml e o struts-config, e tambám já incluí todos os arquivos .jar do tipo commons que eu conheço à pasta lib, além de outras que outras pessoas recomendaram por aí.

Se estou postando esta mensagem é porque já não sei mais o que fazer (além de continuar vasculhando a web atrás de mais possíveis razões e soluções para essa exception).

Agradeço qualquer luz.
{}'s

Luiz_Rocha

Foi mal, mas não funcionou. Nem com as alterações feitas.
Suspeito que tenha algo a ver com incompatibilidade da versão - mas no ponto em que chegei já tô atirando pra tudo quanto é lado.

Ainda preciso de ajuda.

Luiz_Rocha

Eu já tinha olhado essa página. Também não foi de ajuda.

Luiz_Rocha

Pessoal… consegui.

Tudo o que eu fiz pra fazer rodar foi deixar o eclipse de lado e recomeçar “do zero e meio” usando o projeto pré-fabricado “struts-blank”. Que solução besta… 8)

Então, pra ajudar quem quer que venha parar nesta página em busca da solução, deixo aqui minha ajuda: a lista de possíveis causas e soluções que coletei na minha peregrinação pela web.

1- Causa mais provável: ou o seu web.xml ou struts-config.xml deve estar incompleto (ou os dois). Não esqueça de mapear corretamente suas ações. Exemplo:
web.xml

(...)
<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>
    <init-param>
      <param-name>debug</param-name>
      <param-value>2</param-value>
    </init-param>
    <init-param>
      <param-name>detail</param-name>
      <param-value>2</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>

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

Nunca esqueça da tag . Embrora alguns possam dizer que ela é opcional, outras fontes dizem ter resolvido o problema quando colocaram essa tag.

Também não esqueça de colocar uma barra / no começo de cada “caminho”. Vi muita gente por aí esquecendo isso na tag que indica o caminho do struts-config, no parâmetro path de (veja código abaixo) e na definição do form, na página jsp.

struts-config

code






(…)




</action-mappings>

(…)

página jsp

<html:form action="/login" method="post">
<p align="right">
<table>
	<tr>
		<td><bean:message key="form.login.nome"/>:</td>
		<td><html:text property="nomeUsuario" size="12"/></td>
	</tr>
	<tr>
		<td><bean:message key="form.login.senha"/>:</td>
		<td><html:password property="senhaUsuario" size="12"/></td>
	</tr>
	<tr>
		<td></td>
		<td><html:submit><bean:message key="form.login.submit"/></html:submit></td>
	</tr>
</table>
</p>
</html:form>

Note que em <html:form action="/login" method=“post”>, o caminho de action não termina com .do. Algumas pessoas colocavam o .do (ex: action="/login.do") e o programa não rodava.

Note também que o caminho de action deve ser igual ao colocado em path, atributo da tag , dentro de de , no struts-config.

Exemplo:
struts-config.xml

code

<action

path="/login"

        name="logonForm"
        forward="/pages/logado.jsp"/>
</action-mappings>

(…)

pagina.jsp

code
<html:form action="/login" method=“post”>
(…)[/code]

2- Algumas pessoas descobriram que se alguns arquivos .jar não estiverem na pasta lib do seu projeto, o mesmo erro acontecerá. São eles:
[list] antlr.jar[/list]
[list] commons-collections.jar,[/list]
[list] commons-dbcp.jar,[/list]
[list] commons-lang.jar,[/list]
[list] commons-pool.jar,[/list]
[list] commons-resources.jar,[/list]
[list] commons-beanutils.jar[/list]
[list] commons-digester.jar[/list]
[list] commons-fileupload.jar[/list]
[list] commons-logging.jar[/list]
[list] commons-validator.jar[/list]
[list] jarkarta-oro.jar[/list]
[list] struts.jar[/list]

Se eu estiver errado com essa lista, cobrem desses caras:
http://forum.java.sun.com/thread.jspa?threadID=387141&messageID=2684678
http://blogs.developerfusion.co.uk/blogs/thushan/archive/2005/12/09/974.aspx

Por fim, se nada disso adiantar, faça o que todo livro recomenda que você faça primeiro: reaproveite o projeto “struts-blank” (você pode baixar por aí), que já vem semi-pronto e funcionando, e adicione/modifique o que você quiser. Foi só assim que eu consegui ver as coisas funcionarem aqui no meu quintal.

Espero ter sido de ajuda.

Valeu.

Criado 20 de setembro de 2007
Ultima resposta 26 de set. de 2007
Respostas 6
Participantes 3