JavaScript com JAVA

13 respostas
diogoprosoft

Galera minha duvida deve ser muito simples mais estou quebrando a cabeca…

Como faço para que meu javascript consiga diretamente verificar todos o campos do form, sendo que o nome dos objetos do form é igual aos atributos do meu VO, ai quando eu levar a requisicao para o lado servidor ele preencha o VO com os dados que foram digitados no form gravando o mesmo no banco de dados e no inverso tbm quando o usuario faz uma consulta no formulario é feita a requisicao para o servidor que chama minha action que faz as funcoes de consulta no banco e gera uma string no banco levando ate o form preenchedo com os dados da consulta.

Minha duvida realmente é como deixar o javascript generico para levar os dados do form para minha classe java e ao retornar da minha classe ele ja preencha meu form

Alguem tem alguma ideia?

13 Respostas

diogoprosoft

para melhorar a ideia tenho essa chamada com ajax

function fetchJSONData(acao){
                    
                  var url = 'FetchJSON.action';                  
                  var pars = 'mcg.codigo='+$F('codigo')+'&mcg.nome='+$F('nome')+'&acao='+acao;
        
        
        
    	var myAjax = new Ajax.Request(
                    url,    
                    {                        
                            method: 'POST',
                            parameters: pars,                            
                            onComplete: fetchSuccessInfGerais
                    });
       }
   function fetchSuccessInfGerais(originalRequest){				
				                                
       var result = originalRequest.responseJSON;
       
       if(result.mcg.acao == "consultar"){
         document.getElementById('nome').value = result.mcg.nome;
       }
       if(result.mcg.acao == "salvar"){
          document.getElementById('oDivMens').innerHTML = result.mcg.pRetMensagem; 
       }
   }

Onde ele seta diretamente no meu VO mais tenho que colocar na mao os atributos no parametro, nao quero isso quero generalizar o codigo podendo enviar todo o objeto o mesmo acontence no retorno

marcosharbs

tais desenvolvendo em cima de algum framework??

diogoprosoft

sim, STRUTS 2 e DOJO

bsl.lacerda

Não sei se entendi direito mas…

Dá uma olhada neste tutorial aqui.

Eu acho que se você declarar uma referência ao objeto que quer recuperar ao invés de declarar os atributos deste objeto e depois setar o Struts (no caso o 2) injeta os valores dos atributos no objeto para você sem você precisar dar set…() ou get…().

Segue aí o exemplo da Action do Tutorial.

package quickstart.action;

import java.util.List;

import quickstart.model.Person;
import quickstart.service.PersonService;

import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.Preparable;

public class PersonAction implements Preparable {
    private PersonService service;
    private List<Person> persons;
    private Person person;
    private Integer id;

    public PersonAction(PersonService service) {
        this.service = service;
    }

    public String execute() {
        this.persons = service.findAll();
        return Action.SUCCESS;
    }

    public String save() {
        this.service.save(person);
        this.person = new Person();
        return execute();
    }

    public String remove() {
        service.remove(id);
        return execute();
    }

    public List<Person> getPersons() {
        return persons;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public void prepare() throws Exception {
        if (id != null)
            person = service.find(id);
    }

    public Person getPerson() {
        return person;
    }

    public void setPerson(Person person) {
        this.person = person;
    }
}
diogoprosoft

sim blz desta form eu sei que funciona o porem e que o retorno de todas as paginas é em string, pois como utilizo DOJO que tudo em divs, nao posso dar refresh de jeito nenhum entao utilizo json para o retorno da action ai o javascript e fundamental para isso, e para nao precisar criar um js para cada pagina minha quero generalizar isso tudo

bsl.lacerda

Existe um plugin do struts2 que converte o retorno das actions em JSON.
É este o problema?

diogoprosoft

nao mano, esse js que passei ele esta funcionando eu consigo levar os dados em json consigo consultar, salvar, tudo certinho o unico lance e que segundo esse js que tenho ai nao esta generico sendo que terei que criar um para cada pagina minha, eu quero fazer um js para toda minha aplicacao, essa e a questao

bsl.lacerda

Entendi.
O que você quer é descobrir uma forma de gerar seu pars sem ter que ir de atributo em atributo (na mão) para montá-lo.
Você quer uma forma de fazer isso automaticamente.

Se não for isso eu desisto… :lol:

diogoprosoft

cara vc e esperto, hehehehe desculpe pela falta de colocar as ideias na tela mais realmente é isso que eu preciso, sabe como fazer? ou tem alguma ideia?

bsl.lacerda

rsrsrs
cara, talvez com loop e pegando os elementos do form com form.getElementById(x);

tipo:

var pars = "";
for (int x = 0; x < 10; x++) {
  pars = pars + form.getElementById(x);
}

Onde o id dos elementos do form fossem números sequenciais ou o que os diferenciasse fosse o número.

Lógico que você teria que quebrar a cabeça um pouquinho mais para botar pra funcionar mas achoque dá sim…

diogoprosoft

mais ai que ta agora vc esta pensando como eu, mais o lance e um seguinte se eu usar getElementById nao tem como eu aproveitar o js para todos os forms que eu tiver ai terei que criar um para cada, isso que eu nao quero e sim diminuir a demanda de .js

bsl.lacerda

Não sei se é POG mas…
Se você souber qual formulário tem o maior número de elementos você pode iterar de 0 até o limite.
Vamos supor que no caso o limite seja 5.

var pars = "";   
for (int x = 0; x < 5; x++) {   
  try {
    pars = pars + form.getElementById(x);   
  } catch (err) {
    break;
  }
}

Se o form em questão tiver menos elementos entra no catch e você encerra o loop.
Ou você descobre a qtd de elementos de cada form e seta como limite.
Algo tipo:

var limite = document.getElementById("form").getNumeroDeElementos(); (Aqui não sei o método direito)
var pars = "";   
for (int x = 0; x < limite; x++) {   
      pars = pars + form.getElementById(x);   
}
diogoprosoft

RESOLVIDO:

<script type="text/javascript">
            function js_teste(){
              
	    var myJSONObject = 
	[{
	"acao": "ler",
	"tag": ["codigo","nome","fone","email"],						
	"valor": ["1","diogo","9999999","teste@teste"]
	}];
				
		
	var myObject = eval(myJSONObject);
				
	for(i=0; i<myObject[0].tag.length; i++){
					
                var tag = document.getElementById(myObject[0].tag[i]);					
	var valor =  myObject[0].valor[i];
	tag.value =  valor;
					
					
	}	
						       
            }
        </script>
Criado 6 de novembro de 2008
Ultima resposta 10 de nov. de 2008
Respostas 13
Participantes 3