Boa tarde amigos,
Estou com uma pequena dúvida. Estou usando Struts 1.3.8 … Tenho uma classe FornecedorAction, e quero criar um método para cada action que vem do struts-config… Atualmente tenho que fazer um IF dentro desta action e pegar o valor de um property de um button por exemplo… Quero criar um metodo para cada action, exemplo alterar, incluir, e etc… como faço este direcionamento amigos ?
struts-config:
<action path="/alterarFornecedor"
type="br.com.sce.controller.action.fornecedor.FornecedorAction"
name="fornecedorForm"
input="/jsp/fornecedor/listarFornecedor.jsp"
scope="request"
validate="true">
<forward name="fwd-sucesso_alterar_fornecedor" path="/jsp/fornecedor/alterarFornecedor.jsp"/>
</action>
Obrigado…
vc tera que ter passar um parametor para sua action por exemplo assim:
<action name="InserirAlterarTipoSolictPapltaForm" path="/excluirTipoSolictPaplta" parameter="dscAcao" type="br.com.controller.actions.controle.TipoSolictPapltaActions" validate="false" scope="request">
<forward name="sucesso" path="/navegacaoControle.do?target=consultarTipoSolictPaplta" contextRelative="false" />
<forward name="falha" path="/htdocs/programas/controle/Cadastro.jsp" contextRelative="true" />
<forward name="resubmit" path="/htdocs/programas/controle/Usuario.jsp" contextRelative="true" />
</action>
parameter=“dscAcao” esse trecho é oque vc terá que implementar.
e entao a sua classe action vc terá que da extends de DispatchAction.
entao se o parametro dscAcao = “inserirUsuario”, ele vai executar o metodo inserirUsuario dentro da classe action.
vlw!!!
Entendi amigo,
Mas quando implemento o parameter no struts-config, e no uso extends DispatchAction no método dentro da Action … o eclipse informa um erro pedindo para eu criar uma classe DispatchAction… O que devo fazer?
Vlw!
Estou implementado o meu método na action assim:
package br.com.sce.controller.action.fornecedor;
import java.util.ArrayList;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.struts.action.*;
import br.com.sce.business.dao.fornecedor.FornecedorDAO;
import br.com.sce.business.vo.fornecedor.*;
import br.com.sce.resources.ConstantsUtil;
public final class FornecedorAction extends DispatchAction{
// Alterar fornecedor
public ActionForward alterarFornecedor (
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) throws Exception {
System.out.println("*** alterarFornecedor ***");
ActionMessages errors = new ActionMessages();
ActionMessages sucesso = new ActionMessages();
FornecedorDAO daoFornecedor = new FornecedorDAO();
// Objeto beanFornecedorForm que é populado com o que veio da jsp
FornecedorVO fornecedorForm = (FornecedorVO) form;
// Objeto beanFornecedor é o que vai para a jsp forward - se não houver erros
String IdFornecedor = fornecedorForm.getId(); // Com Struts
String opcao = request.getParameter("opcao");
boolean bExist = daoFornecedor.selectNomeFantasiaFornecedorBoolean(fornecedorForm.getNomeFantasia());
// Se for alterar e não existe no BD
if(fornecedorForm.getOpcao().equals("ALTERAR") && !bExist) {
System.out.println("** Fornecedor Inexistente para Alteração! **");
ActionMessage error = new ActionMessage("error.alteracao");
errors.add(ActionMessages.GLOBAL_MESSAGE, error );
saveErrors(request, errors);
return new ActionForward(mapping.getInput());
}
if(opcao.equals("ALTERAR")) {
fornecedorForm.setId(IdFornecedor);
int flagUpdate = daoFornecedor.update(fornecedorForm);
fornecedorForm.setId(Integer.toString(flagUpdate));
// Verifica se ocorreu alteração do fornecedor e encaminha msg de sucesso para a JSP.
if(flagUpdate > 0) {
sucesso.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("sucesso.fornecedorAlteradoComSucesso"));
saveMessages(request, sucesso);
return mapping.findForward(ConstantsUtil.FWD_SUCESSO_ALTERAR_FORNECEDOR);
} else {
System.out.println("ATUALIZAÇÃO NAO REALIZADA!");
}
}
// Põe na sessão o resultado o fornecedorForm Populado
HttpSession session = request.getSession();
session.setAttribute("fornecedorForm", fornecedorForm);
return mapping.findForward(ConstantsUtil.FWD_SUCESSO_ALTERAR_FORNECEDOR);
}
}
Porq que o Struts não “reconhece” o DispatchAction amigos?
Vlw!
Amigos, descobri porq que a classe DispatchAction não estava sendo reconhecido no meu projeto, era porq não tinha o arquivo struts-extras.jar. Agora já está sendo reconhecido, mas ainda não funciona. O método não é achado dentro da classe LoginAction, oq pode ser amigos?
action do struts-config:
<action path="/login"
type="br.com.sce.controller.action.login.LoginAction"
parameter="login"
name="loginForm"
input="/jsp/login.jsp"
scope="request"
validate="true">
<forward name="fwd-sucesso" path="/jsp/index.jsp"/>
</action>
Classe LoginAction:
package br.com.sce.controller.action.login;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.struts.actions.DispatchAction;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.action.ActionMessages;
import br.com.sce.business.dao.usuario.UsuarioDAO;
import br.com.sce.business.vo.login.LoginVO;
import br.com.sce.business.vo.usuario.UsuarioVO;
import br.com.sce.resources.ConstantsUtil;
public class LoginAction extends DispatchAction{
public ActionForward login(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
System.out.println("*** LoginAction ***");
UsuarioDAO daoUsuario = new UsuarioDAO();
LoginVO loginVO = (LoginVO)form;
boolean valida = false; // Retorno do BD validando o acesso
ActionMessages errors = new ActionMessages();
System.out.println("getLogin: " + loginVO.getLogin());
System.out.println("getSenha: " + loginVO.getSenha());
if (loginVO.getLogin() == null || loginVO.getLogin().trim().equals("")) { // trim tira os espaços em branco
errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("error.login"));
}
if(loginVO.getSenha() == null || loginVO.getSenha().equals("")) {
errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("error.senha"));
}
if(errors.size() != 0) {
saveErrors(request, errors);
System.out.println("Erro no Preenchimento do Login ou Password!");
return new ActionForward(mapping.getInput());
} else {
System.out.println("Login ou Password Preenchidas corretamente!");
System.out.println("Vai no banco validar Login e Password!");
valida = daoUsuario.verificaUsuario(loginVO.getLogin(),loginVO.getSenha());
UsuarioVO verificaNivelUser = daoUsuario.verificaNivelUsuario(loginVO.getLogin());
System.out.println("loginBean.getNivel(): " + verificaNivelUser.getId());
// Retorno da validação do Login Senha no BD
if(valida && verificaNivelUser.getId().equals("1")) { // Se validado OK
System.out.println("NIVEL 1!");
HttpSession session = request.getSession();
session.setAttribute("loginBean", loginVO);
return mapping.findForward(ConstantsUtil.FWD_SUCESSO);
}
if (valida && verificaNivelUser.getId().equals("2")){
System.out.println("NIVEL 2!");
return mapping.findForward(ConstantsUtil.FWD_SUCESSO);
}
else {
System.out.println("Login ou Password invalido no BD!");
errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("error.validador"));
saveErrors(request, errors);
return new ActionForward(mapping.getInput());
}
}
}
}
Error:
type Exception report
message
description The server encountered an internal error () that prevented it from fulfilling this request.
exception
javax.servlet.ServletException: 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:709)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
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:709)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
note The full stack trace of the root cause is available in the Apache Tomcat/5.5.12 logs.