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
HashMap em JavaScript
13 Respostas
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"
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>
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
ps* ja postei aqui um problema com isso anteriormente naum consegui resolver apenas consegui contornar de outra forma
esta pagina naum carrega :S
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
eu tentei mas da erro de java Script com relação ao HashMap
vc ja usou este exemplo?
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 
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');
<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"/>
public String setCamposTela(ArrayList ana) {
return SUCCESS;
}
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…
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??

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.