MetaDados com laszlo

Olá para todos…

Bem estou com uma dúvida.

Meu problema é o seguinte, tenho um conjunto de meta dados certo, que esta no banco, a minha classe vai retornar um list de beans com esses dados do meta dados, nele vou ter todas as informações que preciso para montar a minha tela, como: label, nome da variavel, tipo(input, combo, list e etc) esse “sistema” já esta funcionando em java mesmo, so que quero passar isso para laszlo, tipo.

o usuário vai carregar a página, ai vou no banco pego os valores e retorno um list de beans desses valores, o que eu quero é que ele pegue teste e veja qual tipo de componente ele deverá montar na tela, um input, uma combo, um list, uma aba e etc, nao estou sabendo e nem vendo como fazer isso em laszlo, como fazer para definir em tempo de execucao qual tipo de componente ele ira montar no formulário.

Deu para entender ? Alguem sabe como resolver isso ?

Agradeço qualquer ajuda.

Abraços

opa blz?

algo que deve lembrar o OpenLaszlo é apenas para VIEW,
sendo assim, qual é responsabilidade da camada VIEW de aplicações?

essa parte de acesso a dados, banco de dados, calculos pesados, geração de relatórios e afins deve ser feita pela camada de negocio da aplicação e a participação da VIEW será apenas de controles sobre esses serviços…

algo que deve ser lembrado, o OpenLaszlo trabalha com dados estruturados em tags, então após recuperar seus metadados no banco, na camada de negocio você deve modelá-los para um XML e enviar o resultado para o OpenLaszlo para apenas exibir os resultados encontrados e depois usar essas informações como parametros para realizar novos processamentos

para facilitar tua vida com Java e XML utilize o XStream para realizar esse serviço :wink:

[]'s

Opa blz…

"algo que deve lembrar o OpenLaszlo é apenas para VIEW,
sendo assim, qual é responsabilidade da camada VIEW de aplicações? "
cara quanto a isso eu sei, eu tenho uma action que vai me retornar um xml com o que eu quero montar, so que o problema é que não estou conseguindo tratar esse retorno…

Minha action…estou gerando um XML pra mim trabalhar com ele…

List<BeanItemContratacao> listItens = DAOItemContratacao.selectItemContratacaoSimples();
		
		XStream stream = new XStream();
		
		stream.alias( "listItem", BeanItemContratacao.class );
		stream.setMode(XStream.ID_REFERENCES);
		String xml = stream.toXML( listItens );
		
//		request.setAttribute( "saida", xml );
		response.setContentType("text/xml");
		response.addHeader("Content-Disposition", "inline; filename=arq.xml");
		
//		xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + xml;
		response.getOutputStream().write(xml.getBytes());
		response.getOutputStream().flush();
		response.getOutputStream().close();
		
		System.out.println( "[SAÍDA]\n" + xml );

Meu arquivo lzx

<canvas bgcolor="gray" width="100%" height="100%" debug="true">
<dataset name="dsSend" trimwhitespace="true" proxied="true" request="false" type="http" src="http://127.0.0.1:8080/Laszlo/index.do?method=carregaItens"/>
 
 <datapointer xpath="dsSend:/" ondata="processData()">
    <method name="processData">
      this.selectChild(2); 
      do {
        if (this.xpathQuery( '@id' ) == '3') {
        	Debug.write('Entrou 1');
            Debug.write(this.xpathQuery('nm__variavel/text()'));
        }else{
        	Debug.write('Entrou 2');
        	if(this.xpathQuery('nm__variavel/text()') == 'IEstacionamentoExclusivoPart'){
        		Debug.write(this.xpathQuery('nm__variavel/text()'));
        		Debug.write('Beleza');
        	}
        	Debug.write(this.xpathQuery('nm__variavel/text()'));
        }
      } while (this.selectNext()); 
    </method>
  </datapointer>
	
</canvas>

O retorno do meu XML da action (http://127.0.0.1:8080/Laszlo/index.do?method=carregaItens)

<list id="1">
  <listItem id="2">
    <cd__item__contratacao>1</cd__item__contratacao>
    <cd__item__contratacao__superior>0</cd__item__contratacao__superior>
    <cd__tipo__componente__negocio>0</cd__tipo__componente__negocio>
    <cd__sub__grupo__comp__neg>0</cd__sub__grupo__comp__neg>
    <cd__tipo__resposta></cd__tipo__resposta>
    <cd__agrupador>0</cd__agrupador>
    <ds__item__contratacao>Utiliza estacionamento exclusivo para o veiculo do Segurado (P)?</ds__item__contratacao>
    <nm__variavel>IEstacionamentoExclusivoPart</nm__variavel>
    <fl__imprime></fl__imprime>
    <fl__obrigatorio></fl__obrigatorio>
    <fl__parametrizacao></fl__parametrizacao>
    <ds__eventos></ds__eventos>
    <nu__ordem__visual>0</nu__ordem__visual>
    <nu__ordem__impressao>0</nu__ordem__impressao>
    <cd__integracao>0</cd__integracao>
    <fl__help__online></fl__help__online>
    <ds__eventos__help__online>abrirPopup('IEstacionamentoExclusivo',410,250)</ds__eventos__help__online>
  </listItem>
  <listItem id="3">
    <cd__item__contratacao>2</cd__item__contratacao>
    <cd__item__contratacao__superior>0</cd__item__contratacao__superior>
    <cd__tipo__componente__negocio>0</cd__tipo__componente__negocio>
    <cd__sub__grupo__comp__neg>0</cd__sub__grupo__comp__neg>
    <cd__tipo__resposta></cd__tipo__resposta>
    <cd__agrupador>0</cd__agrupador>
    <ds__item__contratacao>Descricao 2</ds__item__contratacao>
    <nm__variavel>variavel2</nm__variavel>
    <fl__imprime></fl__imprime>
    <fl__obrigatorio></fl__obrigatorio>
    <fl__parametrizacao></fl__parametrizacao>
    <ds__eventos></ds__eventos>
    <nu__ordem__visual>0</nu__ordem__visual>
    <nu__ordem__impressao>0</nu__ordem__impressao>
    <cd__integracao>0</cd__integracao>
    <fl__help__online></fl__help__online>
    <ds__eventos__help__online>abrirPopup('variavel2',300,200)</ds__eventos__help__online>
  </listItem>
  <listItem id="4">
    <cd__item__contratacao>3</cd__item__contratacao>
    <cd__item__contratacao__superior>0</cd__item__contratacao__superior>
    <cd__tipo__componente__negocio>0</cd__tipo__componente__negocio>
    <cd__sub__grupo__comp__neg>0</cd__sub__grupo__comp__neg>
    <cd__tipo__resposta></cd__tipo__resposta>
    <cd__agrupador>0</cd__agrupador>
    <ds__item__contratacao>Descricao3</ds__item__contratacao>
    <nm__variavel>variavel3</nm__variavel>
    <fl__imprime></fl__imprime>
    <fl__obrigatorio></fl__obrigatorio>
    <fl__parametrizacao></fl__parametrizacao>
    <ds__eventos></ds__eventos>
    <nu__ordem__visual>0</nu__ordem__visual>
    <nu__ordem__impressao>0</nu__ordem__impressao>
    <cd__integracao>0</cd__integracao>
    <fl__help__online></fl__help__online>
    <ds__eventos__help__online>abrirPopup('variavel3',300,200)</ds__eventos__help__online>
  </listItem>
  <listItem id="5">
    <cd__item__contratacao>4</cd__item__contratacao>
    <cd__item__contratacao__superior>0</cd__item__contratacao__superior>
    <cd__tipo__componente__negocio>0</cd__tipo__componente__negocio>
    <cd__sub__grupo__comp__neg>0</cd__sub__grupo__comp__neg>
    <cd__tipo__resposta></cd__tipo__resposta>
    <cd__agrupador>0</cd__agrupador>
    <ds__item__contratacao>Descricao4</ds__item__contratacao>
    <nm__variavel>variavel4</nm__variavel>
    <fl__imprime></fl__imprime>
    <fl__obrigatorio></fl__obrigatorio>
    <fl__parametrizacao></fl__parametrizacao>
    <ds__eventos></ds__eventos>
    <nu__ordem__visual>0</nu__ordem__visual>
    <nu__ordem__impressao>0</nu__ordem__impressao>
    <cd__integracao>0</cd__integracao>
    <fl__help__online></fl__help__online>
<ds__eventos__help__online>abrirPopup('variavel4',300,200)</ds__eventos__help__online>
  </listItem>
</list>

So que ele mostra NULL…agora o mais intrigante…no lugar de fazer…

<dataset name="dsSend" trimwhitespace="true" proxied="true" request="false" type="http" src="http://127.0.0.1:8080/Laszlo/index.do?method=carregaItens"/>

eu crio um arquivo xml mesmo, coloco O MESMO RETORNO e faço assim…

<dataset name="dsSend" src="arq.xml"/>

ai ele funciona…porque ? não estou entendendo o por que disso…

aguardo retorno

pequeno detalhe…

não vi onde você realiza o request dos dados no seu dataset :roll:
quando você usa o arquivo no dataset, pelo que me lembre ele verifica automatico, diferentemente de quando você usa uma URL…

tenta colocar o atributo request para true ao inves de false ali :wink:

[]'s

não entendi o que vc quiz dizer…vc ta falando do código abaixo ?

<dataset name="dsSend" trimwhitespace="true" proxied="true" request="false" type="http" src="http://127.0.0.1:8080/Laszlo/index.do?method=carregaItens"/> 

Bem desculpa mais não entendi nada do que vc falou…vc endenteu o meu problema ?

Ja testei tanto com true quanto com false e o erro persiste…

ninguem sabe resolver isso ?

obrigado e desde já agradeço qualquer ajuda…

hum…

já testou a URL:
http://127.0.0.1:8080/Laszlo/index.do?method=carregaItens

direto no browser e verificou como está sendo gerado a saida
da action na resposta enviada para o OpenLaszlo?

Ele retorna um XML puro, e como eu já falei eu peguei esse retorno e coloquei dentro de um xml e chamei ele na “mão” e o mesmo funcionou.

Mais quando efetuo a chamada pela action ele nao funciona.

hum… pelo que você me descreveu me parece
com algo que já aconteceu comigo…

vc disse que pegou o retorno, como assim, da página html?

nessa página que retornou no browser da execução da action,
mande exibir o codigo fonte da página e este código fonte deve
estar corretamente formatado como um XML

desconfio eu que ele está transformando os caracteres como o “<”
para os codigos ASCII para exibir na pagina, caso isso esteja ocorrendo
esse é o problema…

ceritique-se que a saida para o browser esta pagina genera estaja sendo
feita sob o mime-type: application/xml

:wink:

Eu mandei imprimir o retorno no console , copiei e colei em um arquivo XML, depois alterei a url da action para chamar diretamente o arquivo xml como foi mostrado anteriormente.

[quote]
So que ele mostra NULL…agora o mais intrigante…no lugar de fazer…

Código:

<dataset name=“dsSend” trimwhitespace=“true” proxied=“true” request=“false” type=“http” src=“http://127.0.0.1:8080/Laszlo/index.do?method=carregaItens”/>

eu crio um arquivo xml mesmo, coloco O MESMO RETORNO e faço assim…
Código:

<dataset name=“dsSend” src=“arq.xml”/>

ai ele funciona…porque ? não estou entendendo o por que disso… [/quote]

Quando chamo direto do xml ele funciona, mais quando uso o endereco da action da erro, alias nao faz nada…

Na minha action como tambem foi mostrado eu coloco:

response.setContentType&#40;&quot;text/xml&quot;&#41;;

Novamente minha action…

List&lt;BeanItemContratacao&gt; listItens = DAOItemContratacao.selectItemContratacaoSimples&#40;&#41;;
      
      XStream stream = new XStream&#40;&#41;;
      
      stream.alias&#40; &quot;listItem&quot;, BeanItemContratacao.class &#41;;
      stream.setMode&#40;XStream.ID_REFERENCES&#41;;
      String xml = stream.toXML&#40; listItens &#41;;
      
//      request.setAttribute&#40; &quot;saida&quot;, xml &#41;;
      response.setContentType&#40;&quot;text/xml&quot;&#41;;
      response.addHeader&#40;&quot;Content-Disposition&quot;, &quot;inline; filename=arq.xml&quot;&#41;;
      
//      xml = &quot;&lt;?xml version=\&quot;1.0\&quot; encoding=\&quot;UTF-8\&quot;?&gt;\n&quot; + xml;
      response.getOutputStream&#40;&#41;.write&#40;xml.getBytes&#40;&#41;&#41;;
      response.getOutputStream&#40;&#41;.flush&#40;&#41;;
      response.getOutputStream&#40;&#41;.close&#40;&#41;;
      
      System.out.println&#40; &quot;&#91;SAÍDA&#93;\n&quot; + xml &#41;; 

Bem realmente não sei mais o que fazer…

Uma coisa que eu estava observando, quando eu carrego a pagina ele já executa o dataset, ai quando dou submit no formulário ele nao executa mais, e agora quando faço via metodo(codigo abaixo) ele da um problema de "form submission timeout " putz isso já ta dando eh raiva…afff

&lt;method name=&quot;montaItens&quot; &gt;
			Debug.write&#40; '### Monta Itens ###' &#41;;
			dSet.setQueryType&#40;&quot;POST&quot;&#41;;
			dSet.setSrc&#40; 'http&#58;//127.0.0.1&#58;8080/Laszlo/index.do?method=demonstrativo' &#41;;
            dSet.doRequest&#40;&#41;;
		&lt;/method&gt;

como te falei eu já tive um problema desses…

olhou o codigo fonte da pagina gerada
se o fonte está com a formatação correta?

Xml gerado: CORRETAMENTE
Código lzx: CORRETO
Action: ACESSANDO E RETORNANDO UM XML PURO CORRETO.

Cara o xml, lzx estão corretos… foda que a empresa quer adotar o laszlo so que nao to vendo produtividade, facilidade, e a curva de aprendizagem é muito grande e o tempo é pouco, e poucas pessoas sabem ele, pelo menos as que eu conheco…sei nao viu…putz

bom…

o OpenLaszlo não tem uma curva de aprendizado grande…

pedi para realizar um teste, fez?
mesmo colocando o response a saida exibida no seu browser foi correta
não o que você vê ali, mas sim no código fonte do mesmo?

qual framework você está usando no lado a aplicação java?

na tela de debug do OpenLaszlo madou imprimir o conteudo do dataset
que realizou a solicitação da request, qual o conteudo?
caso não tenha conteudo, gerou algum erro exibido ali na janela e Debug?
se sim, qual erro?

quanto ao OpenLaszlo pouca gente sabe ele realmente, e as que sabem são menos ainda que sabem usa-lo corretamente… não quanto a ele em si, mas por falta de conhecimento dos conceitos Web 2.0 e RIA( que acredito que não seja o teu caso )

provavel que seja algum detalhe no meio que está complicado esse funcionamento… quanto mais informações você me repassar do cenario atual que você está tendo esse problema, mais facil será para mim tentar te ajudar a solucionar o problema :wink:

[quote]mesmo colocando o response a saida exibida no seu browser foi correta
não o que você vê ali, mas sim no código fonte do mesmo? [/quote]

Sim, esta correto, é um XML PURO sem nenhum erro, tanto
que quando mando abrir direto no ff ele carrega como XML mesmo e olhei tambem pelo codigo fonte, e esta a mesma coisa.

struts

[quote]na tela de debug do OpenLaszlo madou imprimir o conteudo do dataset
que realizou a solicitação da request, qual o conteudo? [/quote]

Sim, é o mesmo XML que ele gera…

[quote]caso não tenha conteudo, gerou algum erro exibido ali na janela e Debug?
se sim, qual erro? [/quote]

quando fiz acionando um método ele da a seguinte mensagem(nao diz se eh erro, warning nada…apenas exibe…),abaixo

form submission timeout

quando ele executa pelo dataset nao exibe nada no debug.