Parâmetro não sobrevive ao redirecionamento

16 respostas
Ironlynx
Tenho uma página na qual o usuário escolherá um item, e cairá em um formulário com esse item já escolhido, o problema, é que eu tenho um atributo hidden que é responsável por selecionar a ação a ser executada num hashmap do meu controlador que redireciona para essa página com o formulário.Ah, o codigo tah + ou - assim:
<form name="menu" action="ageris\ageris.controle.Controlador" method="post">
<input type="hidden" name="cmd" value="">
&lt;em&gt;<b><p>Selecione o Ramo de Seguro: </p></b>&lt;/em&gt;
<p><a href="#" name="15" value="tiposeg">15 - Incêndio</a></p>
<p><a href="#" name="20" value="tiposeg">20 - Responsabilidade Civil</a></p>
<p><a href="#" name="25" value="tiposeg">25 - Veículos</a></p>
<p><a href="#" name="30" value="tiposeg">30 - Vida em Grupo</a></p>
<p><a href="#" name="35" value="tiposeg">35 - Garantia Contratual</a></p>
<p><a href="#" name="40" value="tiposeg">40 - Lucro Cessante</a></p>
<p><a href="#" name="45" value="tiposeg">45 - Transportes</a></p>
<p><a href="#" name="50" value="tiposeg">50 - Aeronaves</a></p>
<p><a href="#" name="55" value="tiposeg">55 - Embarcaçoes</a></p>
<p>[<a href="#" value="cadastra-ramo">Incluir Dado Geral</a>] [<a href="#" value="cadastra-sinistro">Incluir 
  Sinistro</a>]</p>
&lt;/form&gt;
Como fazer esse parametro name chegar "vivo" no meu formulário e sobreviver ao redirecionamento?

16 Respostas

thiago.correa

Tente redirecionar a sua página com o parâmetro já na URL

Ironlynx
Tente redirecionar a sua página com o parâmetro já na URL
A idéia é ótima, mas o problema é que eu tenho uma Action redirecionadora antes da página+ou - assim:
public class ComandoSelecionarTipoSeg implements Action {
	private String proxima;

	public ComandoSelecionarTipoSeg(String proxima){
		this.proxima=proxima;
	}

	public void execute(HttpServletRequest req, HttpServletResponse response)
			throws ExcecaoAction {
		try {
			req.getRequestDispatcher(proxima).forward(req,response);
		} catch (ServletException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return ;
	}
}
proxima corresponde a página em si q é passada ao construtor: new ComandoSelecionarTipoSeg("/cadastra-ramo.jsp")); Como vc faria?Dá um exemplo!
Ironlynx

Tentei mandar um param arrumando o hashmap do controlador assim:

paginas.put("tiposeg",new ComandoSelecionarTipoSeg("/cadastra-ramo.jsp?name="));

e no ComandoSelecionarTipoSeg:

public class ComandoSelecionarTipoSeg implements Action {
	private String proxima;

	public ComandoSelecionarTipoSeg(String proxima){
		this.proxima=proxima;
	}

	public void execute(HttpServletRequest req, HttpServletResponse response)
			throws ExcecaoAction {
		try {
			req.getRequestDispatcher(proxima+req.getParameter("name")).forward(req,response);
		} catch (ServletException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return ;
	}}

Mas o parâmetro JAMAIS sobrevive(sempre vem null).Qual a melhor forma do param sobreviver a um redirecionamento???

David

Tente usar response.sendRedirect() no lugar de request.getRequestDispatcher().forward() e passar os parametros… :slight_smile:

Ironlynx

Já tentei assim(com sendRedirect)Nem redireciona(Dah erro 404)!A não ser que eu esteja esquecendo algo, não funfa…

David

Será que você não está esquecendo? Porque eu acho que era pra funcionar, Cola aqui o endereço para o qual ele está tentando redirecionar.

Ironlynx

Opa, é o proxima, que na verdade é o /cadastra-ramo.jsp posto no hashmap de controle!
Mas o fato é que assim funciona:

req.getRequestDispatcher(proxima+req.getParameter("name")).forward(req,response);

O problema é fazer a variável não vir nula…

David

Eu tava pensando em algo assim:

res.sendRedirect(proxima + "?name=" + req.getParameter("name"));Será que funcionaria?

Ironlynx

Será que funcionaria?
Nop!vem assim:

e diz que cadastro-ramo.jsp está indisponível!
Vou testar de outras formas!Qdo funcionar eu posto!

David

Ah, cara, entendi agora o seu problema… Desculpe, eu tava confundindo!

O problema tá no seu form, Primeiro, porque a tag não possui os atributos name e value. Além disso, acho que você está confundindo name com value. Você trocou as bolas lá… Imagine que você fosse fazer isso com radiobuttons, no lugar desses links. Ficaria assim:

<input type="radio" name="tiposeg" value="15"/> 15 - Incêndio
<input type="radio" name="tiposeg" value="20"/> 20 - Responsabilidade Civil
<input type="radio" name="tiposeg" value="25"/>25 - Veículos
...

Name é o nome do parametro em request e value o seu valor. Para pegar o item selecionado pelo usuário você faria:

req.getParameter("tiposeg"); // tiposeg pq foi o nome que você colocou em name
Ironlynx
Name é o nome do parametro em request e value o seu valor. Para pegar o item selecionado pelo usuário você faria:
O erro foi meu ao postar antes!(Peguei do eclipse, mas modifico no JCreator-não tenho tanta memo assim para ficar com elipse+tomcat+mysql direto ...hehehe)o correto é assim:
<body> <form name="menu" action="ageris\ageris.controle.Controlador" method="post"> <input type="hidden" name="cmd" value=""> <em>

Selecione o Ramo de Seguro:

</em>

15 - Incêndio

20 - Responsabilidade Civil

25 - Veículos

30 - Vida em Grupo

35 - Garantia Contratual

40 - Lucro Cessante

45 - Transportes

50 - Aeronaves

55 - Embarcaçoes

[Incluir Dado Geral] [Incluir Sinistro]

</form> </body>
e lógico que daria null fazendo req.getParameter("name"), mas o problema, pelo que eu tô sacando nos logs do controlador, é que ocorreu um "embananamento" de parâmetros!É que eu tenho um parametro hidden("cmd") que é responsável por quem chamar no controlador de acordo com a seguinte função js:
&lt;script language="JavaScript"&gt;
function setCmd(valor){
    document.menu.cmd.value = valor;
    document.menu.submit()    
}
&lt;/script&gt;
Sacou o problema?o name do form que é "cmd", passa para "tiposeg", por isso tah dando merda... vem null toda hora... ainda não pensei na melhor forma de lidar com isso.Mas valeu a ajuda mesmo! :D
Ironlynx

Para vc entender melhor, meus logs:

As ações nulas referen-se a redirecionamentos inócuos(são nulos mesmo!), mas ao passar para ComandoSelecionarTipoSeg, a chave “tiposeg” passa nula, e deveria chegar na jsp um 15, mas vem null.Eu seja, ela não passa a ComandoSelecionarTipoSeg!

David

Já verificou se o erro é no javascript? Coloca uns alerts lá para ver se os valores estão sendo passados corretamente.

Ironlynx
Já verificou se o erro é no javascript?
Opa, já e tah td ok!

deixa eu postar a parte das actions q saiu interpretada pelo forum:

<form name="menu" action="ageris\ageris.controle.Controlador" method="post">
<input type="hidden" name="cmd" value="">
<em><b><p>Selecione o Ramo de Seguro: </p></b></em>
<p><a href="javascript:setCmd('tiposeg')" name="tiposeg" value="15">15 - Incêndio</a></p>
<p><a href="javascript:setCmd('tiposeg')" name="tiposeg" value="20">20 - Responsabilidade Civil</a></p>
<p><a href="javascript:setCmd('tiposeg')" name="tiposeg" value="25">25 - Veículos</a></p>
<p><a href="javascript:setCmd('tiposeg')" name="tiposeg" value="30">30 - Vida em Grupo</a></p>
<p><a href="javascript:setCmd('tiposeg')" name="tiposeg" value="35">35 - Garantia Contratual</a></p>
<p><a href="javascript:setCmd('tiposeg')" name="tiposeg" value="40">40 - Lucro Cessante</a></p>
<p><a href="javascript:setCmd('tiposeg')" name="tiposeg" value="45">45 - Transportes</a></p>
<p><a href="javascript:setCmd('tiposeg')" name="tiposeg" value="50">50 - Aeronaves</a></p>
<p><a href="javascript:setCmd('tiposeg')" name="tiposeg" value="55">55 - Embarcaçoes</a></p>
<p>[<a href="javascript:setCmd('cadastra-ramo')" value="cadastra-ramo">Incluir Dado Geral</a>] [<a href="javascript:setCmd('cadastra-sinistro')" value="cadastra-sinistro">Incluir 
  Sinistro</a>]</p>
</form>
repare que eu tenho dois atributos name com nomes distintos(cmd no form e tiposeg).Isso não dá m no meu POST?Eu tenho 4 anos de java, mas essa é apenas minha segunda aplicação web, não repare as minhas dúvidas para lá de imbecis em html... :roll:
David

Olha, o que acontece é o seguinte: no link você está setando o valor de cmd e é esse cmd que você enviará para a action. Para acessar o seu valor, você deve usar req.getParameter(“cmd”); Só que você está setando o valor de cmd para ‘tiposeg’, de forma que quando você fizer req.getParameter(“cmd”) você vai obter a String “tiposeg” e não os valores. Para isso funcionar, em vez de setCmd(‘tiposeg’) use setCmd(‘15’), por exemplo, e use o req.getParameter(“cmd”).

Mas eu acho que a maneira mais simples de fazer isso que você quer é com radiobuttons, como eu falei um pouco acima.

Ironlynx

Sem dúvida!Eu testei com o radiobutton e funciona 100%… acho q daquela maneira não tinha muitas alternativas não…sempre haveria duplicidade devido a dois atributos com conteúdos diferentes!
(Espero que meu “chefe” aceite com radios…hehehe)
Mas valeu David! :thumbup:

Criado 20 de abril de 2006
Ultima resposta 22 de abr. de 2006
Respostas 16
Participantes 3