1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Armazenar valores corretamente em um Map<String, String>

Olá a todos, bom dia. Bem pessoal, meu problema é o seguinte: Tenho um Servlet onde pego alguns valores via Ajax que são clicados numa página e passo esse valores clicados para um método em Java. Tais valores ao serem clicados são passados como parâmetros para uma query ser executada. Segue abaixo a maneira como pego os valores clicados e os passo para o meu método.

// Pego os valores clicados
String valueClick = request.getParameter("valueClick");
// Passo os valores clicados
eq.queriesAlreadyExecuted(valueClick, countClick);

O que eu gostaria era de armazenar todos esses valores clicados juntamente com os resultados gerados pela query com tal parâmetro em um Map. Porém da maneira atual como meu código se encontra o que estar acontecendo é que sempre quando um novo valor é clicado o valor que já estava armazenado no Map é sobrescrito. Abaixo segue meu método queriesAlreadyExecuted().

// Meu Map fica em uma outra classe
// Juntamente com os metódos GET e SET
private Map<String, String> queriesAlreadyExecuted = new HashMap<String, String>();

public void queriesAlreadyExecuted(String valueClick, int countClick) {
  if (!e.getQueriesAlreadyExecuted().containsKey(valueClick)) {
        // Executo a query aqui dentro. 
        // Abaixo armazeno os valores no Map
        e.setQueriesAlreadyExecuted(valueClick, queryJena.printQueryJSON());;
  }
}

Então pessoal, alguém saberia me dizer o que devo fazer para que meu Map armazene todos os valores corretamente e não apenas o último?

Desde já obrigado pela ajuda, abraços.

  • o valor antigo é sobrescrito porque a chave usada para gravar a informacao no map é a mesma se voce tentar guardar tres valor no map com a mesma chave quando voce ter um get apenas pegar o ultimo valor...

    Cristian Urbainski   05 de jun de 2013
  • Oi Cristian, bom dia. As chaves são diferentes, pois o método só é chamado quando um novo valor é clicado. Além disso, no IF verifico se o valor clicado já existe ou não no Map.

    if (!e.getQueriesAlreadyExecuted().containsKey(valueClick)) {
           ...
    }

    Fazendo um teste aqui, se eu der um System.out.println(e.getQueriesAlreadyExExecuted().keySet()); acima do IF a cada nova interação ele perde o valor que já estava armazenado no Map é como se estivesse dando um new Map<...> a cada interação. Sabe como reverter esse problema? Obrigado pela ajuda.

    jeovane.reges   05 de jun de 2013
  • O queriesAlreadyExecuted fica dentro do servlet? Talvez ele esteja sendo instanciado a cada Request.

    E se você transforma-lo em static? Não sei se esse é o comportamento que você quer, mas se fizer isso, todas as instâncias do seu servlet irão compartilhar esse objeto.

    felipe_gdr   05 de jun de 2013
  • Olá felipe_gdr bom dia. O Map não estar no Servlet. Isso é o que acho que esteja acontecendo mesmo, ou seja, a cada Request ele (Map) estar sendo instanciado novamente e com isso acabado perdendo o valor que já estava armazenado anteriormente. Irei transformá-lo em static e ver o resultado. Desde já obrigado pela ajuda.

    jeovane.reges   05 de jun de 2013
  • Olá novamente felipe_gdr. Bastou mudar o Map para static que funcionou perfeitamente :-) .. O que uma palavra não faz Hehe.. Obrigado pela ajuda. Abraços pessoal.

    jeovane.reges   05 de jun de 2013
Mostrar todos os 8 comentários>
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

1 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags ajax java servlets ou faça a sua própria pergunta.