Trocar Método

5 respostas
D

A minha duvida é a seguinte:
O codigo abaixo esta ok, mas para ele funcionar, o metodo deve ser chamar execute(…) , qndo eu mudo ele para listarPorCodigo, ai aparece o seguinte erro:

message DispatchMapping[/produtos] does not define a handler property

description The server encoutered an internal error(DispatchMapping [/produtos] does not define a handler property) that prevented it from fulfilling this request.

O q tenho q configurar no struts-config.xml para chamar o metodo listarPorCodigo ao inves de execute?

Abaixo segue os arquivos q estou usando:

struts-config.xml

<action path="/produtos" scope="request" name="produtosForm" validate="false" type="teste.ProdutoAction">
    <forward name="sucesso" path="/pages/produtos.jsp" />
</action>

ProdutoAction.java

public ActionForward execute(ActionMapping mapping, ActionForm form,
		HttpServletRequest request, HttServletResponse response) {
	int cod = Integer.parseInt(request.getParameter("cod"));
	Collection produtos = listar(cod);
	request.setAttribute("produtos", produtos);
	return mapping.findForward("sucesso");
	
}

5 Respostas

J

Você não pode simplesmente mudar o metodo e colocar o que você quiser, isso faz parte da API do Struts e você tem que obedece-la, se não o framework não funciona. Você tem que só sobrescrever o método.

Até existe um esquema de criar Inner Actions, igual tem no Mentawai, usando Struts, mas a configuração fica tão ruim que sinceramente, isso é quase inútil. Se está tentando colocar varias coisas na mesma action, ou você coloca tudo no método execute(), cria outra Action e esquece isso… ou usa um framework melhor.

:wink:

D

Mas eu ja vi diversos exemplos em q eles mudam o metodo para outro nome ao inves de execute…mas tipo assim, se eu mudar o nome para listar, o q tenho q mexer no struts-config.xml, para ele saber q é para acessar o metodo listar?

F

No seu struts-config.xml:

<action .... parameter=metodo />

No seu ActionForm:

public class FormEu extends ActionForm{
   private String metodo;
  //get e set
}

No seu action:

public class ActionEu extends Action{
 public ActionForward meuNome(ActionMapping mapping, ActionForm form,
			HttpServletRequest req, HttpServletResponse res) throws   Exception {
    return null; // retorna algo melhor :)
}


}

No seu jsp:

<form....>
<input type="text" name="metodo" value="meuNome" />

Entendeu?
Vc tem que identificar lah no seu xml, qual a String que armazenará o nome do metodo chamado, coloca esse atributo no form, seta o valor do form no jsp e dê o submit.
Ao executar ele entra automaticamente no método informado.

J

Não falei, a configuração do struts é sinistra…

Ainda bem que já foi-se!

P

sim, eh possível utilizar o método q vc quiser, inclusive ter uma Action que contenha varios métodos que tenham algo em comum, para fazer sentido estarem na mesma classe…

o lance eh q a sua Action vai ter q extender ActionDispatcher
http://struts.apache.org/1.x/apidocs/index.html e não mais Action…eh la no struts-config, vc vai atribuir um parametro a mais, q sera o “method” aih vc vai mapear qual método vc quer q seja executado…

se eu nao me engano eh assim, eu num tenho nenhum exemplo aqui, se eu conseguir eu posto…

flw

Criado 25 de janeiro de 2007
Ultima resposta 29 de jan. de 2007
Respostas 5
Participantes 4