HashMap em JavaScript

13 respostas
acramos

Ola…
eu preciso estava pensando em tirar de minhas paginas o submit para salvar o cadastro…para isso estava pensando em preencher um HasMap com o nome de cada campo da tela + o valor do campo porém ai esta o problema como criar um hashMap via javaScript?
alguém tem alguma sugestão…
preciso que seja assim pois ele tem de ser generico ou seja servir pra qualquer pagina que eu va trabalhar
Agradecida
Ana Claudia Ramos

13 Respostas

T

JavaScript tem um recurso chamado “Associative Array” que é o equivalente do HashMap. Exemplo:

var r  = new Array();
r ["josé"] = "aparecido";
r ["judas"] = "tadeu";
alert (r ["judas"]); // mostra "tadeu"
J

Ou então:

<HTML>
<HEAD>
<TITLE> New Document </TITLE>

<SCRIPT LANGUAGE="JavaScript">
<!--
var arrayCampos = new Array();
var i = 0;

function Objeto(valor1, valor2) {
  this.campo = valor1;
  this.valor = valor2;
}

function popula(campo,valor) {
  arrayCampos[i++] = new Objeto(campo, valor);
}

function a() {

  for (var a=0;a<10;a++) {
     popula("C"+a,a);
  }

  for (var i=0;i<arrayCampos.length;i++) {
    alert("Campo= "+arrayCampos[i].campo+" Valor= "+arrayCampos[i].valor);
  }
}
//-->
</SCRIPT>
</HEAD>

<BODY>
<FORM METHOD="POST" ACTION="" NAME="sistema">
<input type="button" value="teste" onClick="a()">
</FORM>
</BODY>
</HTML>
acramos

Estou testando o do "Associative Array"mas naum to conseguindo enviar por Dwr apesar do meu converter vem de novo aquele erro Missing bean{
aixii mas vou tentar com object… :S
eu naum sei qual é a razão mas naum consigo enviar nunca direito um objeto via Dwr

acramos

ps* ja postei aqui um problema com isso anteriormente naum consegui resolver apenas consegui contornar de outra forma

Metaleiro

http://www.anieto2k.com/2006/10/31/hashmap-en-javascript/

acramos

esta pagina naum carrega :S

Metaleiro

O Código que está na página:

var myHM = new HashMap();
myHM.put('a', new String('This string contains A'));
myHM.put(new String('b'), new String('This string contains B'));
myHM.put('0', new String('And this string? Zero'));
window.alert(myHM.size());	// ritorna 3

// Replace
// notare che è indifferente usare un oggetto String o un valore scalare.
myHM.put('b', new Date());
if( myHM.get('b') instanceof Date )
window.alert('E' una data');

// Remove
if( myHM.containsKey('a') && myHM.containsValue('This string contains A') )
window.alert('L'oggetto 'A' è presente');
myHM.remove('a');
if( myHM.containsKey('a') || myHM.containsValue('This string contains A') )
window.alert('Ooops 'A' è ancora presente');		// Non compare

window.alert(myHM.size());	// ritorna 2

// Clear
myHM.clear();
window.alert(myHM.size());	// ritorna 0
acramos

eu tentei mas da erro de java Script com relação ao HashMap
vc ja usou este exemplo?

cassio

Para mandar pro DWR o equivalente do seu objeto do lado servidor (em Java), vc precisa mapeá-lo no dwr.xml para que seja covnertido (acho que isso vc já fez) e dai vc pode fazer assim com o javascript:

var obj = {atributo1: '', atributo2: ''}; //e assim por diante
DWRUtil.getValues(obj);
SuaClasseJava.seuMetodo(obj, function(retorno){
   //seu codigo de callback aqui...
});

Lembrando que os campos do seu formulario devem ter o id igual aos atributos do hash que a gente criou no javascript (e tbm os mesmos nomes dos atribvutos da sua classe Java), caso contrario a funcao DWRUtil.getValues() não irá funcionar.

Sempre faço assim aqui, funciona que é uma beleza :slight_smile:

acramos
olha .. eu naum consigo :S to tantando mandar um Array olha o codigo
if(novoRegistro == 'true')
            link += '&ehNovoRegistro=true';
        //form.action = link;
        
        //form.submit();
        r = new Array();
        var testeAna = function(valor){
                          
                            for(i=0; i < form.elements.length; i++){
                                
                                if((form.elements[i].type == 'text') || (form.elements[i].type == 'select-one')){
                                    alert('nome->>'+form.elements[i].name + 'valor-->>'+form.elements[i].value + 'TYPE-->'+form.elements[i].type);
                                    atendimentoPacienteWebAction.setCamposTela(form.elements[i].name,form.elements[i].value);
                                    r[form.elements[i].name]= form.elements[i].value;
                                }  
                                
                             }
                                DWRUtil.getValues(r);

                                atendimentoPacienteWebAction.setCamposTela(r,function(retorno){});
                            
                            var salvarForm = function(valor){
                                                        alert(valor);
                                                        if (valor == 'success')
                                                        setCabOk('Funcina'); }
                            atendimentoPacienteWebAction.insertAtendCategConvenio(salvarForm);
                        }
        include("dwr/interface/atendimentoPacienteWebAction.js");
        
        window.setTimeout(function(){ testeAna() }, 3000);
        desativaBotao('btnDesfazer');
        desativaBotao('btnSalvar');
estou fazendo o que vc colocou no dwr esta assim
<convert converter="bean" match="com.opensymphony.xwork2.ValidationAwareSupport"/>
    <convert converter="bean" match="br.com.wheb.action.web.agendaServico.agendamento.AgendaConsulta3514WebAction"/>
    <convert converter="bean" match="com.opensymphony.xwork2.ValidationAwareSupport"/>
    <convert converter="bean" match="java.util.HashMap"/>
    <convert converter="bean" match="java.util.ArrayList"/>

    <convert converter="bean" match="java.util.Arrays"/>
porém naum funciona continua dando aquele erro Missing Bean opener{ ja naum sei mais o que fazer ha a classe java esta
public String  setCamposTela(ArrayList ana) {
        return SUCCESS;
        
    }
só pra teste ..heheeh Sugestões?? os caminhos estão certos.. ja conferi
cassio

Ahhhhh
Mas vc está mapeando ArrayList pelo DWR? Dai complica… vc não vai conseguir passar uma lista inteira pra dentro dele assim tão fácil… Achei que você quisesse passar somente os valores dos campos do seu form para um POJO Java, por exemplo. Afinal, porque vc quer passar o ArrayList? Não consigo entender a necessidade disso…

acramos

hum… vou tentar te explicar vai que vc tem alguma sugestão … melhor…
seguinte como vc pode ver no codigo estou salvando meu formulario … dai que naum quero dar um submit nele
só que como trabalhu num sistema…muito grande… hehe tem de ser algo generico
tipo pra todos…
dai pensei em mudar o metodo de salvar e fazer via ajax utilizando o Dwr
dai que encontrei este problema como enviar meus campos…
pensei em envialos num hashMap ou um array bidimensional
e ai sugestões??
:smiley:

cassio

acramos:
hum… vou tentar te explicar vai que vc tem alguma sugestão … melhor…
seguinte como vc pode ver no codigo estou salvando meu formulario … dai que naum quero dar um submit nele
só que como trabalhu num sistema…muito grande… hehe tem de ser algo generico
tipo pra todos…
dai pensei em mudar o metodo de salvar e fazer via ajax utilizando o Dwr
dai que encontrei este problema como enviar meus campos…
pensei em envialos num hashMap ou um array bidimensional
e ai sugestões??
:D

Se vc for enviar os campos pelo DWR você OBRIGATORIAMENTE terá que criar um Hash com chaves com EXATAMENTE os mesmos nomes dos atributos da(s) sua(s) classe(s) Java.
Eu uso Prototype (Uma API javascript que ajuda MUITO) para me ajudar nessas coisas, mas fazer de maneira genérica… Já sei!
Você pode criar DIVs e colocar os campos do seu formulário dentro. O bacana é que vc nao vai precisar usar . Com o prototype vc consegue manipular o DOM e pegar todos os elementos que estão dentro de um div, por exemplo. Dai é só vc criar um Hash em tempo de execução, varrendo esses elementos que estão dentro do div (ele te devolve um array) e associando no hash o id do input (chave) e o value do input (valor).

Dá uma olhada no protoype. Ajuda muito, mas muito mesmo e é bem tranquilo pra aprender se vc já sabe um pouco de javascript.

Criado 23 de abril de 2007
Ultima resposta 24 de abr. de 2007
Respostas 13
Participantes 5