EclipseAprendizado Page History


Utilizando JSONrray e JSONObject em java

primeiramente deve-se importar o jar para isso como jar aqui

JSONObjects são objetos que funcionam com uma chave e um valor, valores podem ser de vários tipos {"chave1":"valor1","chave2":2}

inclusive ele mesmo

{"usuario":"fulano","json":{"chave1":"valor1","chave2":2}}

nesse caso temos um JSONObjectdentro de outro

JSONArrays, são vetores de JSONObject,portanto começam e terminam com []

[{"usuario":"fulano" , "json":{"chave1":"valor1" , "chave2":2}} , {"usuario":"ciclano" , "json":

{"chave3":"valor3" , "chave2" : 4, "key":"value"}}]

repare que são sempre separados por , tanto as chaves e valores do Object, quanto os Objects do Array

trabalahndo com eles em JAVA

JSONArray rfinal=new JSONArray();//cria um JSONArray
JSONObject obj=new JSONObject();// cria um JSONObject 
obj.put(chave,valor);//adiciona uma chave e um valor a um jJSONObject 
rfinal.add(obj)//adiciona o JSONObject  no JSONArray
obj=rfinal.getJSONObject(0);//recupera o primeiro JSONObject  do JSONArray
obj.getString("chave1")//retorna um valor String de determinada chave
obj.getInt("chave2")//retorna um valor Int de determinada chave
JSONObject obj=new JSONObject("{\"chave1\":\"valor1\",\"chave2\":2}");//cria-se um JSONObject  com base em uma String já existente

também existem outros retornos, normalmente será get(chave), também po-se criar o JSONArray atrávez de uma String da mesma forma

Criar elementos html

para criar um elemento html em javascript com prototype, cria-se uma variavel contendo os códigos html e depois adiciona ela a um elemento

var comps='<tr>'+
'<td><input type="number" class="faixamin" ></td>'+
'<td><input type="number" class="faixamax"  onkeyup="thematicmap.setmin('+(document.getElementsByClassName("faixamax").length+1)+');"></td>'+
'<td><input type="color" class="faixacor"></td>'+
'</tr>';
 $(comps).appendTo('#tabelafaixa');

esse exemplo cria e adiciona linhas em uma tabela, o elemento de class faixamax, recebe uma função do evento onkeyup, que é acionado toda vez que solta-se uma tecla pressionada, essa funcão recebe como parametro a quantidade de elementos com class faixamax+1, toda vez que essa função for chamada esse valor será calculado, assim temos um parametro dinámico

.appendTo('#tabelafaixa'), pode ser mudado para um elemento html como .appendTo('body'), assim adicionará ao corpo do html, o # em '#tabelafaixa' representa que está procurando o id do componente.

Utilizando ActionServlet

Depois da configuração do tomcat no eclipse, pode-se usar um caminho global chamado ActionServlet, que contem um HashTable, um exemplo de atribuição de valor:

atráves do javascript com prototype cria-se uma função para alocar os valores:

setNameSession : function(valor){

        $.post('ActionServlet',{
                  name: valor
            }, function(responseText) { 
            var response = eval(responseText);
        });
},

nessa função valor será variavel, passada por parametro, já name será a chave ela é fixa, mesmo que coloque-se dois parametros como:

setNameSession : function(nome,valor){

        $.post('ActionServlet',{
                  nome: valor
            }, function(responseText) { 
            var response = eval(responseText);
        });
},

não irá funcionar e o valor passado como parametro nome será descartado

chamando a função:

<nomedoarquivo>.setNameSession("fulano");

agora o valor estará salvo

para recuperá-lo cria-se uma função que pega todo o valor do ActionServelet

 getSession : function(){

            var url ='ActionServlet';
            var json ='';
            $.ajax({
                url: url,
                type: 'get',
                async: false,
                success: function(data) {
                    //json = JSON.parse(data);
                    var obj = eval('('+ data +')');
                    if(obj.key != undefined && obj.key != ""){
                        json=obj;

                    }else{

                        showFeedbackModal("erro na recuperação",'');

                    }
                } 
            });
            return json;
        },

chamando no código:

var session=self.getSession();
alert(session["name"]);

isso ira exibir "fulano"

outra opção é alocar uma variavel que seja um HashTable

 setLegendainSession : function(leg){

            $.ajax({
                url: "ActionServlet",
                type: "POST",
                async: false,
                data: {  leg },
                success: function(data) {
                    var response = eval(data);
                },
                failure: function(data) {
                    showAlert(true);

                }

             });
        },

chamando a função

var h={};
h[tema]=legenda;
<nomedoarquivo>.setLegendainSession(h);

supondo que as variavies tema e legenda já estejam criadas, ou pode passar como string mesmo h["tema de ..."]="..." isso gera um leve problema, na quando salva não salva exatamente como tema mas como leg[ tema ] então na chamada

var session=self.getSession();
alert(session["leg["+theme+"]"]);

mesma coisa theme pode ser uma variavel ou uma String

os valores que já existirem e forem alocados novamente serão subistituidos

Criando função no server java

icicialmente criar o caminho da classe depois os caminhos da função, usando as anotações do persistence

@Path("/json")
public class JSONService {
 @GET
     @Path("/spacialquerry")
     @Produces(MediaType.APPLICATION_JSON)
     public Response spacialquerry(

                @QueryParam("idreference") String idreference,
                @QueryParam("idtarget") String idtarget,
                @QueryParam("operation") String operation,
                @QueryParam("x") double x,
                @QueryParam("y") double y){

            return Response.status(200).entity("[{\"idreference\":\""+idreference+"\","
            + "\"idtarget\":\""+idtarget+"\","
            + "\"operation\":\""+operation+"\","
            + "\"x\":\""+x+"\","
            + "\"y\":\""+y+"\"}]").build();
     }
}

assim os exemplos acima podem ser passados para essa funcao, mudando a url para ip:porta/nomeprojeto/rest/caminho - nesse exemplo o caminho será:

.../json/spacialquerry?idreference=<valor>&idtarget=<valor>&operation=<valor>&x=<valor>&y=<valor>

a funcão Response.status(200).entity().build() fará a conversão para json e disponível para ser recuperada pelo ajax no javascrips

claro que ao invés de escrever o json que está sendo retornado na mão, pode-se usar o JSONObject ou array do java vistos no topo desse documento, apenas usar o metodo .ToString(), para que vire string que é o parametro esperado

uma chamada em javascript

var url = domain + "/spacialquerry?";
            url += "idreference="+document.getElementById("themes-reference").value;
            url += "&idtarget="+document.getElementById("themes-target").value ;
            url += "&operation="+document.getElementById("themes-operation").value;
            url += "&x="+thematicmap.latlon.lon ;
            url += "&y="+thematicmap.latlon.lat ;
            $.ajax({
                url: url,
                type: 'get',    
                async: false,
                success: function(data){
                         alert(data[0].idreference);
                        }
            });

neste caso o retorno é um arry por contar '[' no inicio e ']' no final, assim primeiro deve pegar o indice, claro pode-se usar uma estrutura de repetição para isso, mas nesse caso como sempre será um só basta o indice 0, depois '.' e o "atributo"


Last edited by José Maria Villac Pinheiro