Struts 2 - Como carregar os dados de um table "Select" para os input text com ajax? [RESOLVIDO]

6 respostas
kweles

Olá Pessoal estou fazendo um sistema com struts2. Tenho minhas actions que estão funcionando perfeitamente.
Quando realizo uma pesquisa no banco e trago os dados em uma table quero que ao usuário clicar em alterar
não redirecione para outra página e sim carregue os dados na mesma página nos input box correspontes
.

Já possuo a action q pesquisa os dados pelo id:

public class MostraNotaEntradaAjaxAction {
	
		private int id_entrada;
		private Ven_notaentrada vne;
		
		@Action( value="mostraNotaEntradaAjax", results={
				@Result(name="ok", type="httpheader", params={"status","200"})
		})
		
		public String execute() {		
			try
			{
				System.out.println("mostra connection ajax");
				Connection conn = new ConnectionFactory().getConnection();
				vne = new Ven_notaentradaDAO(conn).getNotaById(id_entrada);			
				conn.close();
				
			}catch (SQLException e) {
				throw new RuntimeException(e);			
			}
				
			return "ok";
		}

		public Ven_notaentrada getVne() {
			System.out.println("get vne ajax");
			return vne;
		}

		public void setId_entrada(Integer idEntrada) {
			System.out.println("set id_entrada ajax");
			id_entrada = idEntrada;
		}
		
}

e possuo a jps onde os dados são mostrados na table. Tentei fazer algo com ajax mas não tive sucesso!
Coloquei apenas um input text para teste

<script type="text/javascript">
		function fnc_mostraNotaEntradajs(id_entrada){
			$.post("mostraNotaEntradaAjax", {'id_entrada' : id_entrada});
		}	
	</script>

	Id. Entrada:   	<input type="text" name="vne.id_entrada" value="${vne.id_entrada}" /><br/>

	<table>
		<tr>
			<th>Id. Entrada</th>
			<th>Descricao</th>
			<th>Id. Regional</th>
			<th>Id. Situação</th>
			<th>Ano:</th>
			<th>Faturado</th>
			<th>Id. Origem</th>
			<th>Resumo</th>
			<th>Id. Usuário</th>
			<th>Data Pedido</th>
			<th>Data Entrada</th>
			<th>Excluir</th>			
			<th>Alterar</th>	
			<th>Alterar Ajax</th>							
		</tr>
		<c:forEach items="${vnes}" var="vne">
		 	<tr>
		 		<td>${vne.id_entrada}</td>
		 		<td>${vne.id_entrada}</td>
		 		<td>${vne.id_regional}</td>
		 		<td>${vne.id_situacao}</td>
		 		<td>${vne.ano}</td>
		 		<td>${vne.faturado}</td>
		 		<td>${vne.id_origem}</td>
		 		<td>${vne.resumo}</td>
		 		<td>${vne.id_usuarioincluiu}</td>
		 		<td>
		 			<fmt:formatDate value="${vne.datapedido.time}" pattern="dd/MM/yyyy" />
		 		</td>
		 		<td>
		 			<fmt:formatDate value="${vne.dataentrada.time}" pattern="dd/MM/yyyy" />
		 		</td>
		 		<td><a href="deleteNotaEntrada?vne.id_entrada=${vne.id_entrada}">Excluir</a></td>
		 		<td><a href="mostraNotaEntrada?id_entrada=${vne.id_entrada}">Alterar</a></td>
		 		<td><a href="#" onclick="fnc_mostraNotaEntradajs(${vne.id_entrada})">Alterar Ajax</a></td>
		 	</tr>		 			 
		</c:forEach>				
	</table>

O que está faltando, ou como seria a melhor forma para eu fazer isto?

Obrigado!

6 Respostas

jyoshiriro

Amigo,

já conheçe o http://code.google.com/p/struts2-jquery/ ?

Lá tem tags que facilitam a tarefa que você deseja realizar.

kweles

Olá jyoshiriro!

Obrigado por responder!

Queria dizer que esta tag é fantástica, parabéns, vi q vc é um dos Committers!

Mas antes de eu implementar uma tag, queria muito saber como faço isto sem a tag.

Outra pergunta que faço a todos, vi que tem outras formas, um tal de dojo, mas no fórum do guj, alguém comentou que não é uma boa prática.

Se não houver como fazer sem a tag, farei com ela, contudo gostaria muito de saber qual é a melhor prática. e como fazê-la?

Agradeço o apoio de todos!

jyoshiriro

eu realmente desaconselho o uso do DOJO… Vai de Jquery mesmo.

kweles

Ok, vou tentar implementá-la!

Vi ela funcionando, e achei fantástica!

kweles

jyoshiriro:
Amigo,

já conheçe o http://code.google.com/p/struts2-jquery/ ?

Lá tem tags que facilitam a tarefa que você deseja realizar.

Olá jyoshiriro!

estou tentando implementar o grid do jquery.

  • Copiei o struts2-json-plugin-2.1.8.1.jar para meu lib, contudo estou
    trabalhando com struts 2 by annotations e não com o struts.xml

Como faço para configurar neste caso?

Outra coisa, não utilizo o hibernate, mas acho q isto não impedirá de funcionar, certo?

Obrigado!

kweles

kweles:
Ok, vou tentar implementá-la!
Vi ela funcionando, e achei fantástica!

Olá Pessoal o jyoshiriro me mostrou o caminho das pedras, segue abaixo a forma correta:

não esqueçam da anotação apontando para o json

@ParentPackage( value=“json-default” )

import java.sql.Connection;  
import java.sql.SQLException;  
  
import org.apache.struts2.convention.annotation.Action;  
import org.apache.struts2.convention.annotation.ParentPackage;  
import org.apache.struts2.convention.annotation.Result;  
  
import gsa.dao.ConnectionFactory;  
import gsa.dao.Ven_notaentrada;  
import gsa.dao.Ven_notaentradaDAO;  
  
@ParentPackage( value="json-default" )  
public class MostraNotaEntradaAjaxAction {  
      
        private int id_entrada;  
        private Ven_notaentrada vne;  
          
        @Action( value="mostraNotaEntradaAjax", results={  
                @Result(name="ok", type="json" )  
        })  
          
        public String execute() {         
            try  
            {  
                System.out.println("mostra connection ajax");  
                Connection conn = new ConnectionFactory().getConnection();  
                vne = new Ven_notaentradaDAO(conn).getNotaById(id_entrada);           
                conn.close();                                         
              
            }catch (SQLException e) {                 
                throw new RuntimeException(e);  
            }             
            return "ok";  
            //return "{ id : "+ vne.getId_entrada().toString() +", desc : '"+vne.getDescricao()+"' }";                    
        }  
  
        public Ven_notaentrada getVne() {  
            System.out.println("get vne ajax");  
            return vne;  
        }  
  
        public void setId_entrada(Integer idEntrada) {  
            System.out.println("set id_entrada ajax"+ ((Integer)id_entrada).toString());  
            id_entrada = idEntrada;  
        }  
          
}

jscript na jsp
nesta parte o q vai mandar os dados para o input text é a linha abaixo:
$("#id").val(data.vne.id_entrada);

lembrando q em id deve estar o nome do id de seu input text, no meu caso:

Id. Entrada:

Descricao:

<script type="text/javascript">  
    function fnc_mostraNotaEntradajs(id_entrada){                     
        $.ajax({  
              type: "POST",                 
              url: 'mostraNotaEntradaAjax',  
              data: "id_entrada="+id_entrada,  
              dataType: "json",  
              success: function(data)                   
              {   
                $("#id").val(data.vne.id_entrada);  
                $("#desc").val(data.vne.descricao);  
              }               
            });       
    }     
  
</script>

chamada no jsp:

<td><a href="#" onclick="fnc_mostraNotaEntradajs(${vne.id_entrada})">Alterar Ajax</a></td>

espero q ajude alguém!

valeu galera!

Criado 28 de abril de 2010
Ultima resposta 30 de abr. de 2010
Respostas 6
Participantes 2