Gostaria de expor aqui uma dúvida com relação ao Laszlo, no Eclipse(plugin):
Andei analizando alguns exemplos que já vêm junto com o Laszlo Presentention Server (LPS) e também junto com o plugin do Eclipse e não encontrei algo claro, principalmente no plugin, exemplificando uma aplicação utilizando classes java. O próprio plugin, inclusive, não cria a pasta WEB-INF, automaticamente, na criação de um projeto Laszlo. Gostaria de saber se alguém já fez uma aplicação Laszlo utilizando classes java no mesmo projeto criado e que pudesse explicar aqui a solução.
Grato a todos,
Gustavo
Obs.: O objetivo seria colocar o Struts na Jogada 
Laszlo e MVC
32 Respostas
Dah uma olhada nesses posts,(ou no tópico inteiro)…
O LIPE comentou uma arquitetura interessante pra aplicações q utilizam Laszlo…
Eh claro q tudo depende da necessidade…mas a utilização de XStream eh uma boa opção…
Alguem sabe como resolver o problema de acentuação no laszlo, pois mesmo usando fonts true type não estou conseguindo …
Dah uma olhada nesses posts,(ou no tópico inteiro)…
O LIPE comentou uma arquitetura interessante pra aplicações q utilizam Laszlo…Eh claro q tudo depende da necessidade…mas a utilização de XStream eh uma boa opção…
Valeu
Diogenes.
É bem interessante mesmo usar o XStream.
Fazendo assim:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE canvas SYSTEM "http://www.laszlosystems.com/lps/tools/lzx.dtd">
<canvas width="1024" height="550">
<font name="default" src="verity/verityplus11.ttf" />
</canvas>
Não deve enfrentar mais nenhum problema.
E acompanhe o site do Laszlo, pois a próxima versão (que já está em beta há algum tempo) terá suporte total a UTF-8.
Oi Lipe, brigadão … ficou quase “REDONDO” o character acentuado já aparece quando digito, o problema é que quando recebo de volta algum char acentuado, aparece um “?” no char.
Estou testando com uma “grid” que recebe de volta uma resposta de um servlet a resposta do servlet me parece correta, já acrescentei tambem
“?xml version=“1.0” encoding=“ISO-8859-1”?” ao tipo da resposta do servlet mas mesmo assim não funcionou.
Pode me ajudar ???
ha brigadão tambem ao Gustavo Tavares Seixas , pela ajuda.
A resposta do servlet é uma String representando um arquivo xml, certo? Tenta adicionar o cabeçalho com o encoding no xml também.
E cara, nem estressa muito com isso hehe a versão 3.0 está muito boa e logo logo estará estável 
Já fiz isto e não deu certo, acho que vou deixar assim mesmo por enquanto, estou programando em JAVA a alguns anos … a algum tempo tenho desenvolvido sistemas de medio porte usando “java/actionscript” hoje chamados de “RIA” , após conhecer o “LASZLO” estou convertendo um grande sistema que estou desenvolvendo agora ( para gestão hospitalar ) em lzx, considero a tecnologia LASZLO, uma das melhores coisas em informatica dos ultimos anos ( digo laszlo por ele ser anterior ao flex ) talvez comparavel a revolução cauzada pelo java, se quizer conversar mais ( trocar esperiencias ) sobre o assunto gostaria muito.
Bem, o projeto que utiliza Laszlo está parado este mês, mas a partir de Fevereiro com certeza teremos bastante para conversar hehe 
Espero que tenham bastante pra conversar aquih no GUJ!
Pois afinal, tâmo realmente fiçurados no 100k! 
Caro Lipe, a minha dúvida é bem essa. Não consegui descobrir a maneira de retornar do servlet uma String representando um arquivo xml, apenas. Ou seja, eu saberia como passar a tal String(XML) como um parâmetro de nome qualquer, desta forma:
<method name=“show” args=“ds”>
<![CDATA[
var params = ds.getParams();
Debug.write(n + ': ’ + params.getValue(“variavelQualquer”));
]]>
</method>
O que eu estou procurando saber são duas coisas:
Como passar apenas um XML no retorno do request(se é que isto é possível);
E ao receber este XML, como alimentar diretamente o dataset?
Ou mesmo alguma outra forma de se fazer isto.
Desde já agradeço
Complementando a interação anterior sobre encontrar uma melhor maneira para transferir um arquivo XML de uma Action(servlet) para um arquivo do laszlo(lzx); pergunto se seria o Axis uma solução para este problema. Penso também no SOAP, mas parece, para mim, que o XML gerado através do SOAP, além dos dados úteis, contém também informações não muito úteis(lixo).
Agradeço qualquer sugestão ou opinião 
Cara, sobre como usar os datasets, não importa o quanto eu escrever, nada vai ser tão completo quanto a documentação dele. Lê com carinho, vale a pena 
E sobre a maneira da comunicação do cliente com o servidor, vou usar/estou usando http requests e algumas chamadas rpc pra lá e pra ca.
Mas essa escolha depende totalmente de como planejou e quais são as necessidades do projeto.
Uma action qualquer aqui:
PrintWriter pw = response.getWriter();
pw.write( xml );
pw.close();
Pronto hehe
Valeu Lipe, já ajudou.
Estou lendo com carinho e pode crer que vale a pena. Aliás eu acho que foi uma documentação elaborada com bastante critério. O problema é que meu inglês é ± 85% e eu precisava ter certeza de estar seguindo no caminho correto
E por não se encontrar quase nada de Laszlo em português, no Google, poucas palavras compatriotas valem bastante.
. Mais uma vez agradeço sua atenção. 
Eh necessário informar o content type LIPE?
Eu, Gustavo, fiz um teste sem setar nada no content type e funcionou. O default é HTML, mas se for setado:
( response.setContentType(“text/plain”); )
penso que talvez seja essa a configuração mais apropriada, não tenho certeza.
Por padrão é bom, mas não é obrigatório ( funciona mesmo sem ).
Estou tentando bolar uma solução para criar uma sessão(HttpSession) no Laszlo(LPS) para browsers que não suportem cookies. Dei uma lida no capítulo 38, que fala sobre RPC e, embora não tenha implemantado nada ainda, penso que talvez seja uma boa opção, colocando um atributo hidden com o valor de JSESSIONID. Gostaria de saber se alguém já implementou alguma solução para este problema e que podesse postar algum comentário aqui.
Grato a todos,
Ainda não implementamos isso, mas controlaremos a sessão do usuário utilizando RPC sim.
Uma alternativa seria colocar um timer com o tempo desejado da sessão, e quando ele expira, lança a janela de login. A vantagem é não depender do Servlet Container, mas a desvantagem é não poder guardar objetos serializáveis na sessão.
Valeu Lipe,
Vou tentar implementar usando o RPC acessando um objeto na sessão do container. Acho que dessa forma vai ficar menos complexo, no final. Depois eu posto aqui o resultado.
Quaisquer outras sujestões que alguém quiser postar são sempre muito bem vindas.
Dificuldade com as classes menu, menuitem e menubar.Estou tentando fazer um menu interativo em um sistema que existem usuários que estão alocados em determinados grupos de usuários, onde cada usuário que faz o login deverá visualizar um menu diferenciado, ou seja, de acordo com o seu perfil de usuário. Portanto necessito fazer um mecanismo que monte o menu a partir de um dataset, creio, pois não sei, nem consigo imaginar, um outro caminho para tal solução. Tentei a bessa, através de script, com o tal do método menu.createChildren, mas não consigo fazer com que o new menuitem criado, apareça dentro do menu referenciado.
Por favor, caso algúem já tenha encontrado uma solução para isso, eu agradecerei se puder me dar um help!
Hum, qual o problema do menu ser criado a partir de um dataset dinâmico?
Cara, eu não sei como fazer isso, pelo menos integralmente.
O que eu consegui montar dinamicamente foi apenas foi uma lista de menuitems, mas as células principais de menus ou submenus criados a partir de menuitems eu não consegui. Se você me disser que conseguiu isso, eu já fico muito contente <img src="https://cdn.jsdelivr.net/gh/twitter/twemoji@14/assets/72x72/s.pngmiley.png?v=9" title=":smiley:" class="emoji" alt=":smiley:">
Deixa eu explicar direito pra não ter erro: Quero montar um menu a partir de um xml tipo esse ou semelhante:
<mymenu>
<item coord=“1” text=“HOME PAGE” link=“<a href="http://WWW.GOOGLE.COM">WWW.GOOGLE.COM</a>” />
<item coord=“2” text=“PESQUIZAR QC” link="/ListaUsuario.do" />
<item coord=“21” text=“ETC_1” link=“WWW.TABAJARA.COM.BR” />
<item coord=“211” text=“ETC_2” link=“WWW.ETC1.COM.BR” />
<item coord=“212” text=“ETC_3” link=“WWW.ETC2.COM.BR” />
<item coord=“213” text=“ETC_4” link=“WWW.ETC3.COM.BR” />
<item coord=“22” text=“ETC_5” link=“WWW.ETC4.COM.BR” />
<item coord=“221” text=“ETC_6” link=“WWW.ETC5.COM.BR” />
<item coord=“2211” text=“ETC_7” link=“WWW.ETC6.COM.BR” />
<item coord=“2212” text=“ETC_8” link=“WWW.ETC7.COM.BR” />
<item coord=“222” text=“ETC_9” link=“WWW.ETC8.COM.BR” />
<item coord=“3” text=“ETC_5” link=“WWW.ETC12.COM.BR” />
<item coord=“4” text=“ETC_6” link=“WWW.ETC13.COM.BR” />
</mymenu>
Ou seja, criar um <menubar>, contendo <menu>s, <menuitem>s e outros menus dentro dos <menuitem>s, tudo isso a partir de script(creio ser a única forma).
Concluindo: um código de script, no laszlo, iria ler um XML semelhante ao acima e montar um menu de acordo com as coordenadas.
Tentei desenvolver isso utilizando o método menu.createChildren(array), mas não tive sucesso.
Obrigado pela atenção! <img src="https://cdn.jsdelivr.net/gh/twitter/twemoji@14/assets/72x72/s.pngmiley.png?v=9" title=":smiley:" class="emoji" alt=":smiley:">
http://www.laszlosystems.com/lps-2.2/docs/guide/data.html
aqui tem vários exemplos disso:
http://www.laszlosystems.com/lps-2.2/docs/guide/databinding.html#d0e16630
bons estudos 
Valeu Lipe 
Vou dar uma estudada lá. Depois digo aqui o resultado.
Valeu!
Lipe, dei uma rápida estudada no link que vc indicou, mas o que me pareceu é que o que estava lá não corresponde com a forma de manipulação para se construir menus, mas sim de datasets e datapointers e etc.
O que mais se parece é o da montagem de uma árvore, mas no menu é diferente, porque para se montar o menu são necessários três tags diferentes e para montar uma árvore, basta a própria tag <tree>.
O que estou tentando descobrir agora é se seria possível montar um menu a partir de um dataset, no entanto copiando o menu inteiro, que estaria já perfeitamente formado dentro do dataset.
Desculpe a pergunta, mais o que eu gostaria de saber mesmo sobre sua observação anterior é se você já fez realmente isso, ou se você apenas acredita que isso já é possível de ser feito no Laszlo.
:?
Um menu não implementei, mas o princípio é o mesmo, não importa quantos atributos precise.
Aqui um exemplo de uma tree com propriedades a mais gerada a partir de um dataset qualquer:
dados:
<?xml version="1.0" encoding="ISO-8859-1"?>
<itens>
<item
text="Administração Financeira"
open="true">
<item
link="openDocument"
text="Abrir Documento"
isleaf="true" />
<item
link="newDocument"
text="Novo Documento"
isleaf="true" />
<item
text="Cadastros"
open="false">
<item
link="clientes"
text="Clientes"
isleaf="true" />
<item
link="fornecedores"
text="Fornecedores"
isleaf="true" />
</item>
<item
text="Novo cadastro"
open="false">
<item
link="cliente"
text="Cliente"
isleaf="true" />
<item
link="fornecedores"
text="Fornecedores"
isleaf="true" />
</item>
</item>
<item
text="Gerenciamento Financeiro">
<item
text="Relatórios"
isleaf="true" />
<item
text="Impostos"
isleaf="true" />
<item
text="Lançamentos"
isleaf="true" />
</item>
</itens>
classe especial:
// veja que ela extende tree, então vários métodos e
// propriedades são herdados
<class
name="TreeLink"
extends="tree">
<attribute name="link" />
<method event="onclick">
if( this.link == null )
return false;
// a partir dos dados do nodo clicado, crio uma janela
windowManager.openWin( this.text, this.link );
</method>
</class>
utilização:
<dataset name="menuData" src="menu.xml" />
<tree
datapath="menuData:/itens"
icon="null"
showroot="false">
<TreeLink
datapath="*"
text="$path{ '@text' }"
link="$path{ '@link' }"
isleaf="$path{ '@isleaf' }"
open="$path{ '@open' }"/>
</tree>
Tenho certeza que é possível montar um menu sim.
Lipe, antes de tudo, agradeço sua atenção.
No entanto acho que não fui muito claro ao expressar o problema que me deparo. O problema não é implementar outros atributos. É, antes disso, a simples montagem hierárquica de menus a partir de um dataset, mesmo que seja apenas com o atributo ‘name’. Eu estou tentando fazer funcionar o menu de forma semelhante a que você indicou na iteração anterior, mas não estou tendo sucesso.
No fórum oficial do Laszlo tem um post registrado a mais de dois meses atrás, referenciando o mesmo problema :
“http://www.laszlosystems.com/developers/community/forums/showthread.php?s=e53a3bca4ab8136b3a859cc993228a3d&threadid=1555”. Até hoje não teve nenhuma resposta.
Eu também acredito que fazer um menu desta forma também seja possível. Estou tentando… 
O fórum lá é bem devagar hehe
Pegando o exemplo da documentação:
<menu name="topmenu" attach="bottom">
<menuitem text="item 1"/>
<menuitem text="item 2">
<menu name="submenu">
<menuitem text="subitem 1"/>
<menuitem text="subitem 2"/>
</menu>
</menuitem>
</menu>
poderia fazer assim (não testei)
dataset (arquivo xml)
<itens>
<menuitem text="item 1"/>
<menuitem text="item 2">
<menu name="submenu">
<menuitem text="subitem 1"/>
<menuitem text="subitem 2"/>
</menu>
</menuitem>
</itens>
e para implementar:
<dataset name="menuData" src="menu.xml" />
<menu name="topmenu" attach="bottom" datapath="menuData:/itens">
<menuitem text="$path{ '@text' }"/>
</menu>
Pronto
para implementar um menu inteiro bonitão é praticamente a mesma coisa:
http://www.laszlosystems.com/lps-2.2/docs/reference/index.html?lz-menu.html
Bons estudos 
Eu já havia conseguido fazer desta maneira:
<dataset name="items">
<menuitem text="subitem 3" />
<menuitem text="subitem 4" />
<menuitem text="subitem 5" />
<menuitem text="subitem 6" />
<menuitem text="subitem 7" />
<menuitem text="subitem 8" />
</dataset>
<view width="200" height="200" bgcolor="0xffff80" >
<button text="openMenu top" width="110" >
<menu name="foo" attach="bottom" >
<menuitem datapath="items:/menuitem" text="$path{'@text'}" />
</menu>
<method event="onmousedown">
this.foo.setOpen(!this.foo.opened);
</method>
</button>
</view>
Mas se eu acrescentar o código abaixo substituindo o meuitem 5, no dataset, nada é modificado.
<menuitem text="subitem 5" >
<menu name="subedit" text="subedit"> <menuitem text="subitem 1" />
<menuitem text="subitem 2" />
</menu>
</menuitem>
É aí que está empacada a parada.
Mesmo assim acredito que seja possível, de alguma outra forma talvez, fazer um menu inteiro. Talvez com script tipo: new menu(parent,atrbs,filha,inst). Mas achei a documentação genérica, não tratando de casos específicos, incluindo este. Digo isso porque tentei e não consegui, ao contrário de, por exemplo: new alert(), que deu certo de cara.
Bem, tá bom até de mais pra ser de graça… 
Entendi o problema, as tags mudam para criar submenus.
E para criar novos objetos é exatamente assim como você fez, desde que a classe criada esteja devidamente importada e com todos os parâmetros declarados.
O que você vai precisar fazer é reler a parte de controle a partir de manipulação de datapointers e criar uma classe que vai adicionando nodos a uma menubar a partir dos dados recebidos. Assim é possível diferenciar entre a tag <menu> e <menuitem>.
Não parece muito fácil hehe.
Cara, olha mais de perto os fontes dos exemplos que vêm com a distribuição do Laszlo, tem bastante coisa lá.
É, não parece fácil mesmo, mas é por aí mesmo que eu acho também que é possível. Creio que alguém lá no fórum do Laslo irá fazer alguma pronunciação a respeito. Acho muita complicação para montar um simples menu a partir de um dataset… :? A não ser que eu esteje bobeando, é claro.
Bem, estamos aí…
Comigo funcionou acrecentando a linha baixo no início do arquivo lzx:
<?xml encoding="latin1" ?>