[Logo] Neo Framework Forum
  [Search] Busca   [Recent Topics] Tópicos Recentes   [Members]  Lista de Usuários   [Groups] De volta para a página principal 
[Register] Registrar / 
[Login] Entrar 
Conversão de um bean do java para JavaScript  XML
Índice dos Fóruns -> Dúvidas
Autor Mensagem
guilherme.pimentel
Template
[Avatar]

Membro desde: 21/06/2007 15:52:28
Mensagens: 109
Localização: BELO HORIZONTE
Offline

Vc´s ja pensaram na possibilidade da convesão do bean no lado do servidor para o lado do cliente. A questão é a seguinte eu fiz o seginte codigo:

Code:
	public void getCoordenadaZPiezometro(WebRequestContext request,Model model)throws IOException{
 		Piezometro piezometro = (Piezometro) model.getModelo();
 		request.getServletResponse().getWriter().println(piezometroService.load(piezometro).getZ().floatValue());
 	}


nesse caso eu pego somente uma propriedade teria como eu pegar todas as propriedades do bean e no JavaScript eu poderia ver todas as informações do bean ao invez de ter que fazer um metodo para cada atributo. deu pra entender???

GUILHERME A. MUNCK PIMENTEL
DESENVOLVEDOR JEE
BRASIL - MINAS GERAIS - BELO HORIZONTE
guilherme.pimentel
Template
[Avatar]

Membro desde: 21/06/2007 15:52:28
Mensagens: 109
Localização: BELO HORIZONTE
Offline

Eu fizo seguinte criei um metodo no bean que é o pai de todo mundo:

Code:
 	@Transient
 	public String getBeanToJavaScript() throws IOException {
 		String retorno = "";
 		try{
 			String nomeBean = this.getClass().toString().substring(this.getClass().toString().lastIndexOf(".")+1).toLowerCase();
 			retorno += nomeBean + " = new Object();\n";
 			Class<? extends Object> classe = this.getClass(); 
 			while (classe != null){
 				retorno += montaScriptBean(nomeBean,classe);
 				classe = classe.getSuperclass();
 			}
 		}catch(Exception e){
 			throw new IOException(e.getMessage());
 		}
 		return retorno;
 	}
 	
 	@Transient
 	private String montaScriptBean(String nomeBean,Class<? extends Object> classe) throws IllegalAccessException, InvocationTargetException {
 		List<Field> campos = Arrays.asList(classe.getDeclaredFields());
 		String camposStr = "";
 		for (Field field: campos){
 			try{
 				if (field.getName().indexOf("List")== -1){
 					String valor = BeanUtils.getProperty(this, field.getName());
 					if (field.getType().equals(String.class) ){
 						if (valor == null)valor = "";
 						camposStr += nomeBean+"."+field.getName()+" = '"+ valor + "';\n" ;
 					}else if (field.getType().equals(Double.class) ){
 						//if (valor != null)valor = valor.replace('.', ',');					
 						camposStr += nomeBean+"."+field.getName()+" = "+ valor + ";\n" ;
 					}else if (field.getType().equals(Integer.class) ){
 						if (valor != null)valor = valor.replace('.', ',');					
 						camposStr += nomeBean+"."+field.getName()+" = "+ valor + ";\n" ;
 					}else if (field.getType().equals(Date.class) ){
 						camposStr += nomeBean+"."+field.getName()+" = "+ valor + ";\n" ;
 					}
 				}
 			}catch(NoSuchMethodException e){}
 		}
 		return camposStr;
 	}
 


O retorno desse metodo é a segunte string:

Code:
 piezometro = new Object(); 
 piezometro.codigo = 'TESTE'; 
 piezometro.descricao = 'TESTE'; 
 piezometro.local = '11111111111111111111111111'; 
 piezometro.tipo = 'A'; 
 ...[e todos os outros metodos]
 


No javaScript tem um metodo eval(str) que interpreta o esta na str como se fosse um codigo JavaScript.

Sendo assim no java script agora eu posso acessar tanto o codigo e a descrição sem ter que fazer dois metodos.

GUILHERME A. MUNCK PIMENTEL
DESENVOLVEDOR JEE
BRASIL - MINAS GERAIS - BELO HORIZONTE
rogel.garcia
Xiita

Membro desde: 17/04/2007 16:35:03
Mensagens: 275
Offline

Existe algo parecido com essa funcionalidade em uma versão 'paralela' do neo...

Talvez seja adicionada na próxima versao do neo...

Vc vai colocar na action um código mais ou menos assim:

View.getCurrent()
.setModel(beanModelo)
.setValue("nome");

Esse código acima alteraria o valor nome que está na tela.. de acordo com o valor do bean..
Você pode experimentar usar o View.getCurrent().. na versão atual vc pode executar algumas funcionalidades...
rogel.garcia
Xiita

Membro desde: 17/04/2007 16:35:03
Mensagens: 275
Offline

O View.getCurrent() foi criado principalmente para ajax...

E no JSP vc dá um eval da resposta (que é o comportamento padrao da tag <ajax:call.../> )
guilherme.pimentel
Template
[Avatar]

Membro desde: 21/06/2007 15:52:28
Mensagens: 109
Localização: BELO HORIZONTE
Offline

Tem como vc mostar como eu posso usar esse <ajax:call.../> ???

GUILHERME A. MUNCK PIMENTEL
DESENVOLVEDOR JEE
BRASIL - MINAS GERAIS - BELO HORIZONTE
pedro.goncalves
Equipe
[Avatar]
Membro desde: 17/04/2007 16:12:20
Mensagens: 539
Localização: Belo Horizonte - MG
Offline

Primeiro declare a taglib do ajax.. assim:

Code:
<%@ taglib prefix="a" uri="ajax"%>


depois use assim:

por ex o seu método:

Code:
 public void getCoordenadaZPiezometro(WebRequestContext request,Model model)throws IOException{
  		Piezometro piezometro = (Piezometro) model.getModelo();
  		request.getServletResponse().getWriter().println(piezometroService.load(piezometro).getZ().floatValue());
  	}
 


Code:
 <a:call action="getCoordenadaZPiezometro" functionName="ajaxPiezometro" callback="ajaxPiezometroCallback" parameters="javascript:'modelo='+form['modelo'].value"/>
 


depois o neo gera uma função com o nome que você colocou para chamar o ajax.. no nosso caso é ajaxPiezometro.

ai faz assim:

Code:
 <t:property name=xxx onchange=javascript:ajaxPiezometro() ...
 


ai para controlar a volta.. faz assim:

Code:
 function ajaxPiezometroCallback(data){
      eval(data);
      var x = something;
      form['y'].value = x;
 }
 


ai fica a vontade para fazer o que quiser...

teh!>

Pedro Gonçalves
http://pedrogoncalves.com.br
[Email] [WWW] [MSN]
guilherme.pimentel
Template
[Avatar]

Membro desde: 21/06/2007 15:52:28
Mensagens: 109
Localização: BELO HORIZONTE
Offline

A questão é o seguinte eu fiz a seguinte classes:
Code:
package br.com.geoexplore.geoenterprise.geobarragem.ajax;
 
 import java.io.IOException;
 
 import br.com.linkcom.neo.controller.Controller;
 import br.com.linkcom.neo.controller.MultiActionController;
 import br.com.linkcom.neo.core.web.WebRequestContext;
 ...
 
 @Controller(path="/geobarragem/AjaxNivelPiezometro")
 public class NivelPiezometroAjaxController extends MultiActionController {
 	PiezometroService piezometroService;	
 	
 	public void setPiezometroService(PiezometroService piezometroService) {
 		this.piezometroService = piezometroService;
 	}
 	public void getCoordenadaZPiezometro(WebRequestContext request,Model modelo)throws IOException{
 		Piezometro piezometro = (Piezometro) modelo.getModelo();
 		String teste = piezometroService.load(piezometro).getBeanToJavaScript();
 		request.getServletResponse().getWriter().println(teste);
 	}
 }


e na pagina eu coloquei esse codigo:

Code:
 	piezometro = new Object();
 	function executarAjax(){
 		if (document.getElementsByName("piezometro")[0].value != '<null>')
 		sendRequest('<%=request.getContextPath()%>/geobarragem/AjaxNivelPiezometro?modelo='+document.getElementsByName("piezometro")[0].value,'ACAO=getCoordenadaZPiezometro','POST', ajaxCallback, erroCallback);
 	}
 	function ajaxCallback(data){
 		eval(data);
 		calculaCotaNivelAgua();
 	}
 	function erroCallback(request){
 		alert('Erro no ajax!\n' + request.responseText);
 	}
 



Pelo que eu vi no exemplo que vc colocou em nenhum lugar nas tags vc colocou o caminho da classe. Se não tem que colocar o caminho em nenhum lugar onde esse metodo tem que estar??????

GUILHERME A. MUNCK PIMENTEL
DESENVOLVEDOR JEE
BRASIL - MINAS GERAIS - BELO HORIZONTE
rogel.garcia
Xiita

Membro desde: 17/04/2007 16:35:03
Mensagens: 275
Offline

Esse método tem que estar no mesmo controller que carregou a página.. ou vc pode especificar na tag ajax:call um atributo url indicando qual é o controller
guilherme.pimentel
Template
[Avatar]

Membro desde: 21/06/2007 15:52:28
Mensagens: 109
Localização: BELO HORIZONTE
Offline

Valeu!!!!

GUILHERME A. MUNCK PIMENTEL
DESENVOLVEDOR JEE
BRASIL - MINAS GERAIS - BELO HORIZONTE
guilherme.pimentel
Template
[Avatar]

Membro desde: 21/06/2007 15:52:28
Mensagens: 109
Localização: BELO HORIZONTE
Offline

Estou com um problema agora é na acentuação quando eu passo alguma string que tem acentuação ele mostra no Javascript a string toda desconfigurada, vc já viu isso???

GUILHERME A. MUNCK PIMENTEL
DESENVOLVEDOR JEE
BRASIL - MINAS GERAIS - BELO HORIZONTE
rogel.garcia
Xiita

Membro desde: 17/04/2007 16:35:03
Mensagens: 275
Offline

Sim...

Se vc utilizar o View.getCurrent vc nao terá esse problema...

se vc estiver utilizando o response... vc terá que antes de retornar alguma coisa, escrever

response.setCharacterEncoding("UTF-8");
guilherme.pimentel
Template
[Avatar]

Membro desde: 21/06/2007 15:52:28
Mensagens: 109
Localização: BELO HORIZONTE
Offline

Valeu!!!! Funcionou certinho!!!!

GUILHERME A. MUNCK PIMENTEL
DESENVOLVEDOR JEE
BRASIL - MINAS GERAIS - BELO HORIZONTE
 
Índice dos Fóruns -> Dúvidas
Ir para:   
Powered by JForum 2.1.7 © JForum Team