Chamar ação do option no botão

25 respostas
Videl

olá pessoal…

tenho o seguinte código

<select name="acao">
                                        <option value="Abir">Abrir</option>
                                        <option value="BUSCAR">Alterar</option>
                                        <option value="EXCLUIR">Excluir</option>
                                    </select>
                                    <input type="image" src="gfx/bt_ok.gif" onclick='AreaFuncionalManter?acao=EXCLUIR&codigo=${af.codigo}' class="ok" alt="Ok" value="Submit" />

presiso que no lugar de acao=EXCLUIR no botão ele coloque a acao conforme o que foi selecionado no combo

alguem sabe como fazer isso?

25 Respostas

L

Eu tentaria javascript…
Depois tem outra, porque você não coloca isso numa form e coloca o botão para fazer o submit?
O código vc poderia por num campo hidden.
Daria certo sem complicar a história.

Agora se quer javascript de qualquer jeito, tem que pesquisar, mas imagino que vc iria tratar a querystring com o javascript. Nada de java na história.

Videl

estou tentando não usar javascript

era só chamar o valor do option no excluir, tipo uma variavel que guardasse o valor do option e depois colocasse no botao

L

Então não entendi

use uma form
o resultado estará no próprio action, exatamente como vc escreveu… só vc capturar no getParameter do servlet.

Videl

vamos ver se explico melhor

tenho essa linha:
‘AreaFuncionalManter?acao=EXCLUIR&codigo=${af.codigo}’
ela vai direto para o EXCLUIR…

o que eu quero é q no lugar d excluir apareca algo que represente o que foi selecionado no combo
ex: se escolher alterar no combo a linha fica ‘AreaFuncionalManter?acao=ALTERAR&codigo=${af.codigo}’

thiago.correa

Tenta esse código
Detalhe, eu não testei

<html>
	<head>
		<script>
			function a(){
				
				document.forms[0].action = "/MeuServlet?acao=" + combo.options[ combo.selectedIndex ].value + "&outroParametro=123";
			}
		</script>
	</head>
	<body>
		<form action="">
		<select id='s' onchange="a()">
			<option value="excluir">excluir</option>
			<option value="salvar">salvar</option>

		</select>
		<input type="submit" />
		</form
	</body>

</html>
Videl

estou tentando não usar script na pagina…

Marky.Vasconcelos

Só uma pergunta.

Por que não usar JavaScript?

thiago.correa

Então nem perca seu tempo, faça algo bem simples, crie um botão para cada ação!

Videl

estou tentando nao usar javascript pq achei que teria outra maneira de fazer isso, mas se não tiver aí eu uso então

um botão para cada ação eu ja tinha feito, mas a empresa pediu combo :?

thiago.correa

Então só via JS mesmo eheheheh
Não vai ter escapatória!

L

cara
não entendo o seu problema

usa

excluir salvar

Vc consegue recuperar isso no servlet com getParameter(“acao”) vai retornar uma das strings selecionadas… isso é HTML , nem java é.

Videl

leonardocregis, eu ja havia tentado dessa maneira, mas nao funciona, não faz nada quando roda…

acho q vou pro script mesmo entao…

obrigada pessoal
mas se alguem descobrir outra maneira posta aí :slight_smile:

obs.:não sou homem pra me chamar d cara… :?

L

desculpe quanto ao cara,
estava respondendo tantos posts que acabei me confundindo. Nada pessoal.

Mas é estranho que isso não funcione pois é padrão HTML, como vc fez para recuperar a informação?

Videl

chama no servlet

String acao = request.getParameter("acao");

na jsp

<td><a href='AreaFuncionalManter?acao=BUSCAR&codigo=${af.codigo}'>Alterar</a></td>

assim funciona certinho…

tentei assim no combro

<div class="opcoes">
                                  
                                    <select name="acao">
                                        <option value="Abir">Abrir</option>
                                        <option value="BUSCAR">Alterar</option>
                                        <option value="EXCLUIR">Excluir</option>
                                    </select>
                                    <input type="image" src="gfx/bt_ok.gif" onclick='AreaFuncionalManter?acao=chamaAcao(acao)&codigo=${af.codigo}' class="ok" alt="Ok" value="Submit" />
                                  
                                </div>
<script>
function chamaAcao(acao) { 
alert("O elemento " + (acao.selectedIndex)); 
}
</script>

usando script, não funciona :frowning:

L

Esse javascript q você escreveu, está legal, o problema é como você chama ele :

<div class="opcoes">
                                    <select name="acao">
                                        <option value="Abir">Abrir</option>
                                        <option value="BUSCAR">Alterar</option>
                                        <option value="EXCLUIR">Excluir</option>
                                    </select>
                                    <input type="image" src="gfx/bt_ok.gif" onclick='AreaFuncionalManter?acao=chamaAcao(acao)&codigo=${af.codigo}' class="ok" alt="Ok" value="Submit" />
                                  
                                </div>
onclick='AreaFuncionalManter?acao=chamaAcao(acao)&codigo=${af.codigo}'

O parser nunca vai reconhecer esse “chamaAcao(acao)” codigo…

Você pode usar então o javascript para forçar o envio de um form, mas mais uma vez você terá que ter as tags

Videl

nem assim num foi… aiai

L
Configuração web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>TEsteEnvioDeFormulario</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <servlet>
    <description></description>
    <display-name>RecebeFormulario</display-name>
    <servlet-name>RecebeFormulario</servlet-name>
    <servlet-class>teste.RecebeFormulario</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>RecebeFormulario</servlet-name>
    <url-pattern>/RecebeFormulario</url-pattern>
  </servlet-mapping>
</web-app>

Servlet para receber a mensagem:

package teste;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class for Servlet: RecebeFormulario
 *
 */
 public class RecebeFormulario extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {
   static final long serialVersionUID = 1L;
   
    /* (non-Java-doc)
	 * @see javax.servlet.http.HttpServlet#HttpServlet()
	 */
	public RecebeFormulario() {
		super();
	}   	
	
	/* (non-Java-doc)
	 * @see javax.servlet.http.HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
	}  	
	
	/* (non-Java-doc)
	 * @see javax.servlet.http.HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String parametro =request.getParameter("options");
	}   	  	    
}
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<form name="enviar" method="post" action="RecebeFormulario">
	<select name="options">
		<option value="A">A</option>
		<option value="B">B</option>
	</select>
	<input type="submit" value="enviar"/>
</form>
</body>
</html>

Esse exemplo é funcional e sem uso de javascript..

Videl

esta quase funcionando, só que ele só funciona no primeiro combo da lista e so atualiza ou exclui o ultimo cadastro da lista

ficou assim:

<select name="acao1">
<option value="Abir">Abrir</option>
<option id="BUSCAR" value="BUSCAR">Alterar</option>
<option id="EXCLUIR" value="EXCLUIR">Excluir</option>
</select>
<script type="text/javascript">   
function montaUrl(){               
var url = 'AreaFuncionalManter?acao='+document.getElementById('acao1').value+'&codigo=${af.codigo}';
window.location.assign(url);         
}   
</script>
<input type="image" src="gfx/bt_ok.gif" onclick='montaUrl()' class="ok" alt="Ok" value="Submit" />

alguem sabe como fazer para pegar o indice do cadastro referente ao combo utilizado?

L

“esta quase funcionando, só que ele só funciona no primeiro combo da lista e so atualiza ou exclui o ultimo cadastro da lista”

Eu tentei simular esse negócio aqui, mas não funcionou…
O firefox não atualiza a URL(no IE vai), e pelo que percebi , se não tiver um botão de Submit(ou um form e uma ação do javascript de submit) ele não chama o servlet!

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<form action="RecebeFormulario" method="post" >
	<select name="acao1">  
		<option value="Abir">Abrir</option>  
		<option id="BUSCAR" value="BUSCAR">Alterar</option>  
		<option id="EXCLUIR" value="EXCLUIR">Excluir</option>  
	</select>
	<input type="submit" value="enviar"/>  
</form>
<script type="text/javascript">     
 function montaUrl(){                 
 var url = 'RecebeFormulario?acao='+document.getElementById('acao1').value;  
 window.location.assign(url);           
}     
</script>  
<input type="image" src="gfx/bt_ok.gif" onclick='montaUrl()' class="ok" alt="Ok" value="Submit" />
</body>
</html>

obs: não entrei no mérito do codigo=${af.codigo}’

Videl

então, chamando o servlet ele está, consegui fazer funcionar só q assim:

se tem 5 linhas por exemplo, era pro combo efetuar a ação em cada linha separada e pegar seu respectivo indice, só q ele só funciona o primeiro combo da lista e pega só o indice do ultimo elemento da lista…

mas vou tentar desse jeito q vc falou tb

L

5 linhas do que ? De uma table que está vinculada ao combo ? Se for o caso seria interessante a adição de um check box para indicar aonde as ações irão surtir efeito…

Videl

cada linha é um dado da tabela
ele lista os dados da tabela
do lado fica o combo e o botao ok
cada combo é referente a um indice do dado da tabela…

não posso mudar a maneira de fazer pq a empresa pediu assim
com um link eu ja havia conseguido

L

Agora algumas coisas fizeram mais sentido.
Você ao preencher essa tabela com os itens que poderão ser editados, você coloca algum índice , mesmo que seja hidden ?
Você pode usar esse índice naquele código que vc falou…
codigo=${af.codigo}

para isso vc deve estar usando algum tipo de EL para criar um loop e preencher a lista???

Videl

é nesse codigo mesmo q eu uso o indice

EL seria???

L

Expression Language…

Se não sabe nada sobre, use um loop de servlet para preencher alista e pegue o indice e coloque no javascript.

Criado 19 de junho de 2009
Ultima resposta 24 de jun. de 2009
Respostas 25
Participantes 4