Olá pessoal, boa noite,
Estou aprendendo Struts há pouco tempo, e para isso, estou tentando desenvolver uma página de login muito simples, porém venho enfrentando um problema que não consigo resolver. Quado aperto o botão enviar do formulário, o browser retorna uma mensagem de método não encontrado, mas o método existe! O erro que aparece é o seguinte:
Obs.: estou usando o Tomcat 6.0.14 e o IDE é o Eclipse 3.3.1.1
[b]exception
javax.servlet.ServletException: java.lang.NoSuchMethodException: Action[/login] does not contain specified method (check logs)
org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:286)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:462)
javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
[b]
root cause
java.lang.NoSuchMethodException: Action[/login] does not contain specified method (check logs)
org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:261)
org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:170)
org.apache.struts.chain.commands.servlet.ExecuteAction.execute(ExecuteAction.java:58)
org.apache.struts.chain.commands.AbstractExecuteAction.execute(AbstractExecuteAction.java:67)
org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:51)
org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:304)
org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:283)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:462)
javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)[/b]
Enfim, não sei o que ocorre, uma vez que, tudo parece normal. O meu Struts config está assim:
[b]<?xml version="1.0" encoding="ISO-8859-1" ?>
<form-beans>
<form-bean name="loginForm" type="org.apache.struts.validator.DynaValidatorForm">
<form-property name="login" type="java.lang.String" />
<form-property name="senha" type="java.lang.String" />
</form-bean>
</form-beans>
<action-mappings>
<action path="/paginaIndex"
name="loginForm"
scope="request"
validate="false"
forward="/testeStruts/formLogin.jsp" />
<action path="/login"
name="loginForm"
scope="request"
type="testeStruts.LoginAction"
parameter="metodo"
validate="true"
input="/testeStruts/formLogin.jsp" >
<forward name="contaLogada" path="/testeStruts/contaLogada.jsp"/>
<forward name="contaNaoLogada" path="/testeStruts/contaNaoLogada.jsp"/>
</action>
</action-mappings>
<message-resources parameter="ApplicationResources" null="false" />
<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
<set-property property="pathnames" value="/WEB-INF/validator-rules.xml, /WEB-INF/validation.xml"/>
</plug-in>
[/b]
E o meu form está assim (o que mais interessa é a action enviada):
[b]<%@ page contentType=“text/html; charset=ISO-8859-1” %>
<%@ taglib uri=“http://struts.apache.org/tags-bean” prefix=“bean” %>
<%@ taglib uri=“http://struts.apache.org/tags-html” prefix=“html” %>
<%@ taglib uri=“http://struts.apache.org/tags-logic” prefix=“logic” %>
| : | |
|---|---|
| : | |
E por último, a classe que tem o método que o ActionServlet diz que não tem:
[b]package testeStruts;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;
import org.apache.struts.validator.DynaValidatorForm;
public class LoginAction extends DispatchAction
{
public ActionForward validaLogin(ActionForm form,
ActionMapping mapping,
HttpServletRequest request,
HttpServletResponse response)throws Exception
{
Conta umaConta = new Conta ((String)((DynaValidatorForm)form).get(“login”),
(String)((DynaValidatorForm)form).get(“senha”));
String login= umaConta.getLogin();
String senha= umaConta.getSenha();
Conta conta = RepositorioLogin.recuperaConta(login, senha);
if(conta != null)
{
request.setAttribute("Conta", conta);
return mapping.findForward("contaLogada");
}
else
{
return mapping.findForward("contaNaoLogada");
}
}
}[/b]
Se alguém puder ajudar eu fico muito grato,
No aguardo de uma resposta, subescrevo me,
Igor Tavares Barata