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"