<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="#" 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>
</form>
Parâmetro não sobrevive ao redirecionamento
16 Respostas
Tente redirecionar a sua página com o parâmetro já na URL
Tente redirecionar a sua página com o parâmetro já na URLA 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 ;
}
}
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???
Tente usar response.sendRedirect() no lugar de request.getRequestDispatcher().forward() e passar os parametros… 
Já tentei assim(com sendRedirect)Nem redireciona(Dah erro 404)!A não ser que eu esteja esquecendo algo, não funfa…
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.
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…
Eu tava pensando em algo assim:
res.sendRedirect(proxima + "?name=" + req.getParameter("name"));Será que funcionaria?
Será que funcionaria?
Nop!vem assim:
e diz que cadastro-ramo.jsp está indisponível!
Vou testar de outras formas!Qdo funcionar eu posto!
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
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>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:Selecione o Ramo de Seguro:
</em> </form> </body>
<script language="JavaScript">
function setCmd(valor){
document.menu.cmd.value = valor;
document.menu.submit()
}
</script>
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!
Já verificou se o erro é no javascript? Coloca uns alerts lá para ver se os valores estão sendo passados corretamente.
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>
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.
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: