lembrando um velho assunto de integração entre ambos( OpenLaszlo + FusionChart ), sugeri a um conhecido( Leonardo Frangelli ) que da App OpenLaszlo chamar um Javascript e esse exibisse o FusionChart em um div layer sobre a App OpenLaszlo...
ps.: legal que essa solução funcionou...
caso mais alguem queria, pode utilizar a mesma idea, para isso de uma olhada nos respectivos links, relacionados a conhecimento necessário para utilizar essa solução:
- HTML sobre um Flash( swf )
- OpenLaszlo: integrando com a página HTML
quarta-feira, 20 de junho de 2007
HTML sobre um Flash( swf )
algo que pode ser útil a alguem é como conseguir colocar um código HTML em cima de um Flash( swf ) na página, digamos que queira usar um div layer que fique sobre esse Flash( swf ) em questão, caso tente diretamente irá observar que não funciona...
mas existe uma forma de conseguir isso, observe o código abaixo:
fonte: [link]
mas existe uma forma de conseguir isso, observe o código abaixo:
<div style="position:relative; font-size:30px; z-index:5;">LAYER 5</div>
<div style="position:relative; font-size:30px; z-index:2">LAYER 2 before flash</div>
<div style="position:absolute; top:0; left:0; font-size:120px; z-index:2;">
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0" width="200" height="150" id="recursion_tree_branch" align="middle">
<param name="allowScriptAccess" value="sameDomain" />
<param name="wmode" value="opaque" />
<param name="movie" value="seuFlash.swf" />
<param name="quality" value="high" />
<param name="bgcolor" value="#e7e7e7" />
<embed src="seuFlash.swf" mce_src="seuFlash.swf" wmode="opaque" quality="high" bgcolor="#e7e7e7" width="200" height="150" name="yourmovie" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />
</object>
</div>
<div style="position:relative; font-size:30px; z-index:4">LAYER 4</div>
<div style="position:relative; font-size:30px; z-index:2">LAYER 2 after flash</div>
<div style="font-size:30px; z-index:1">LAYER 1</div>
fonte: [link]
terça-feira, 19 de junho de 2007
OpenLaszlo: vídeo Max Carlson, co-fundador da Laszlo Systems
Max Carlson, co-fundador e arquiteto da Laszlo Systems, eleborou um vídeo sobre o OpenLaszlo 4 publicado no TheServerSide, fala sobre o OpenLaszlo e como o OpenLaszlo pode ajudar os desenvolvedores a escrever e disponibilizar Aplicações de Internet Rica, tanto como SWF ou como AJAX a partir do mesmo fonte.
Google: procure músicas usando essa poderosa ferramenta de busca
algo bem interessante que vi no blog do Leonardo Frangelli
vejo o vídeo com os passos de como fazer:
descrevendo os passos:
tento a seguinte chave de busca para o Google: intitle:"index.of" (mp3|mp4|avi|wmv|wma) nome.da.musica -html -htm -php -asp -cf -jsp
- essa chave irá procurar no servidor, qualquer um dos arquivos indicados dentro do parenteses
- uma dica de uso foi definir o nome da música a ser procurada, onde houver espaços utilizar '.' para separar
- a parte final da chave de consulta são as extenções que serão ignoradas da consulta
feito isso, jogue essa chave no google... a url que ele retornar agora, para facilitar a tua vida e caso esteja usando o Firefox, basta fazer o seguinte procedimento:
- URL:
* original: http://www.google.com/search?hl=en&q=intitle%3A%22index.of%22+%28mp3%7Cmp4%7Cavi%7Cwmv%7Cwma%29+nome.da.musica+-html+-htm+-php+-asp+-cf+-jsp&btnG=Search
* alterada:
http://www.google.com/search?hl=en&q=intitle%3A%22index.of%22+%28mp3%7Cmp4%7Cavi%7Cwmv%7Cwma%29+%s+-html+-htm+-php+-asp+-cf+-jsp&btnG=Search
onde estava o nome da música procurada, substitua por %s
agora adicione um novo bookmark no seu Firefox, defina um nome qualquer,
onde é para inserir o endereço, coloque o que foi alterato para o %s e
na definição da palavra chave, use por exemplo: music
adicionado, agora basta ir na barra de URL do seu Firefox e digitar a musica que você quer procurar, por exemplo:
music nome.de.outra.musica
ps.: testei e funcionou :D
ou caso queria usar isso diretamente na internet: [link]
vejo o vídeo com os passos de como fazer:
descrevendo os passos:
tento a seguinte chave de busca para o Google: intitle:"index.of" (mp3|mp4|avi|wmv|wma) nome.da.musica -html -htm -php -asp -cf -jsp
- essa chave irá procurar no servidor, qualquer um dos arquivos indicados dentro do parenteses
- uma dica de uso foi definir o nome da música a ser procurada, onde houver espaços utilizar '.' para separar
- a parte final da chave de consulta são as extenções que serão ignoradas da consulta
feito isso, jogue essa chave no google... a url que ele retornar agora, para facilitar a tua vida e caso esteja usando o Firefox, basta fazer o seguinte procedimento:
- URL:
* original: http://www.google.com/search?hl=en&q=intitle%3A%22index.of%22+%28mp3%7Cmp4%7Cavi%7Cwmv%7Cwma%29+nome.da.musica+-html+-htm+-php+-asp+-cf+-jsp&btnG=Search
* alterada:
http://www.google.com/search?hl=en&q=intitle%3A%22index.of%22+%28mp3%7Cmp4%7Cavi%7Cwmv%7Cwma%29+%s+-html+-htm+-php+-asp+-cf+-jsp&btnG=Search
onde estava o nome da música procurada, substitua por %s
agora adicione um novo bookmark no seu Firefox, defina um nome qualquer,
onde é para inserir o endereço, coloque o que foi alterato para o %s e
na definição da palavra chave, use por exemplo: music
adicionado, agora basta ir na barra de URL do seu Firefox e digitar a musica que você quer procurar, por exemplo:
music nome.de.outra.musica
ps.: testei e funcionou :D
ou caso queria usar isso diretamente na internet: [link]
OpenLaszlo: criando uma experiência cinematográfica para o usuário
uma apresentação, por Raju Bitter sobre o OpenLaszlo
Obs.: apresentação em ingles...
Obs.: apresentação em ingles...
Spket IDE 1.5.11
nova versão disponível desde ontem( 18/06/2007 ) possui algumas novas revisões e pelo que percebi incluiram suporte para o Silverlight nessa nova versão também...
bom continuo utilizando ele para desenvolvimento do OpenLaszlo... que desde a versão anterior proporciona um excelente suporte para desenvolvimento dos .lzx, com autocomplete para os códigos, algo legal também é o suporte que proporciona para o desenvolvimento do scripting js internamente dentro do .lzx

para maiores informações acesse o site: Spket IDE
Olhe o item Laszlo no site para maiores informações...
bom continuo utilizando ele para desenvolvimento do OpenLaszlo... que desde a versão anterior proporciona um excelente suporte para desenvolvimento dos .lzx, com autocomplete para os códigos, algo legal também é o suporte que proporciona para o desenvolvimento do scripting js internamente dentro do .lzx
para maiores informações acesse o site: Spket IDE
Olhe o item Laszlo no site para maiores informações...
OpenLaszlo: integrando com a página HTML
bom agora uma outra forma de integração com a página atual onde se encontra a sua
aplicação OpenLaszlo...
digamos o caso que você tem lá a tua aplicação OpenLaszlo, mas quer acessar algum javascript na página atual e por um acaso abrir um layer ( div ) sobre a sua aplicação e injetar algum conteúdo...
bom essa parte é puramente javascript, mas como chamar do OpenLaszlo esse javascript, para executar isso?
bom tem um exemplo na comunidade do Japão do OpenLaszlo de como pode ser feito isso...
para isso será necessário utilizar o seguinte javascript: flashobject.js
na página foi definido da seguinte forma para poder realizar essa comunicação:
* código fonte da aplicação OpenLaszlo [link]
Obs.: note como foi feito na aplicação OpenLaszlo para chamar a function do javascript
aplicação OpenLaszlo...
digamos o caso que você tem lá a tua aplicação OpenLaszlo, mas quer acessar algum javascript na página atual e por um acaso abrir um layer ( div ) sobre a sua aplicação e injetar algum conteúdo...
bom essa parte é puramente javascript, mas como chamar do OpenLaszlo esse javascript, para executar isso?
bom tem um exemplo na comunidade do Japão do OpenLaszlo de como pode ser feito isso...
para isso será necessário utilizar o seguinte javascript: flashobject.js
na página foi definido da seguinte forma para poder realizar essa comunicação:
<script type="text/javascript">
// <![CDATA[
fo = new FlashObject("a.lzx?lzt=swf", "lzapp", "500", "350", "6", "#FF6600");
fo.addParam("swLiveConnect", "true");
fo.addParam("name", "lzapp");
fo.addVariable("Text", "(from HTML)");
fo.write("flashcontent");
function send_to_flash(val){
document.getElementById("lzapp").SetVariable("Text", val);
}
function changeTxt(val){
document.getElementById("fromLZX").innerHTML=val;
}
// ]]>
</script>
* código fonte da aplicação OpenLaszlo [link]
Obs.: note como foi feito na aplicação OpenLaszlo para chamar a function do javascript
<edittext name="input" width="100%" >
<method event="onkeyup" reference="LzKeys" args="k">
var t = this.getText().split("'").join("\\'");
LzBrowser.loadJS("changeTxt('" + t + "')");
</method>
</edittext>
OpenLaszlo: HTML dentro da aplicação
uma das extensões interessantes do OpenLaszlo que está disponível o OpenLaszlo Legals, é uma que possibilita que uma página HTML seja exibida dentro de uma aplicação OpenLaszlo... ( essa funcionalidade funciona tanto para saída: SWF, quanto DHTML )
bom na saída DHTML funciona normalmente, porém na SWF é necessário que quando o .lzx for adicionado no HTML para ser exibido tenha o seguinte parametro setado: .lzx?lzt=swf, com isso funciona...
ver funcionando: [SWF] | [DHTML]
bom na saída DHTML funciona normalmente, porém na SWF é necessário que quando o .lzx for adicionado no HTML para ser exibido tenha o seguinte parametro setado: .lzx?lzt=swf, com isso funciona...
ver funcionando: [SWF] | [DHTML]
Ubuntu: instalar sem particionar o HD, hein? como?
algo útil que vi a um tempo atrás na net, é uma novidade que permite você instalar o Ubuntu( ou qualquer outro linux, em tese ), em um disco virtual dentro da própria partição do Windows e parece que ele até possibilita aquela famosa tela no início, quando inicializamos a máquina, você escolher ou o Linux instalado ou o Windows...
achou interessante a ideia?
então vejo o site oficial: Wubi
outra fonte com mais informações em pt_Br sobre essa solução interessante:
[link: Efetividade.net]
achou interessante a ideia?
então vejo o site oficial: Wubi
outra fonte com mais informações em pt_Br sobre essa solução interessante:
[link: Efetividade.net]
segunda-feira, 18 de junho de 2007
Tomcat 5.0.28 + Oracle: como configurar um datasource
hoje levei um baile até lembrar como configurar um datasource para o tomcat, bom caso alguem esteja passando por alguma dificuldade com esse mesmo tema isso pode ser util:
bom para resolver esse probleminha rapidamente faça o seguinte:
- no diretório /META-INF do teu projeto crie o arquivo: context.xml e nele
insira a configuração do datasource como o exemplo abaixo:
Obs.: note a estrutura do código acima... ( esse foi o porém que consumiu um bom tempo até prestar atenção... )
- no web.xml insira o um código similar a este:
PS.: coloque os .jar do oracle no ${TOMCAT}/common/lib, para efetivamente funcionar o datasource...
mais informações veja o [link:JNDI Datasource HOW-TO]
bom para resolver esse probleminha rapidamente faça o seguinte:
- no diretório /META-INF do teu projeto crie o arquivo: context.xml e nele
insira a configuração do datasource como o exemplo abaixo:
<Resource name="jdbc/myoracle" auth="Container"
type="javax.sql.DataSource"/>
<ResourceParams name="jdbc/myoracle">
<parameter>
<name>factory</name>
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</parameter>
<parameter>
<name>driverClassName</name>
<value>oracle.jdbc.driver.OracleDriver</value>
</parameter>
<parameter>
<name>url</name>
<value>jdbc:oracle:thin:myschema@127.0.0.1:1521:mysid</value>
</parameter>
<parameter>
<name>username</name>
<value>scott</value>
</parameter>
<parameter>
<name>password</name>
<value>tiger</value>
</parameter>
<parameter>
<name>maxActive</name>
<value>20</value>
</parameter>
<parameter>
<name>maxIdle</name>
<value>10</value>
</parameter>
<parameter>
<name>maxWait</name>
<value>-1</value>
</parameter>
</ResourceParams>
Obs.: note a estrutura do código acima... ( esse foi o porém que consumiu um bom tempo até prestar atenção... )
- no web.xml insira o um código similar a este:
<resource-ref>
<description>Oracle Datasource example</description>
<res-ref-name>jdbc/myoracle</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
PS.: coloque os .jar do oracle no ${TOMCAT}/common/lib, para efetivamente funcionar o datasource...
mais informações veja o [link:JNDI Datasource HOW-TO]
domingo, 17 de junho de 2007
Struts 1.3.8: formbean não inicializa....
essa semana me deparei com um problema usando o Struts 1.3.8, eis que tinha criado minhas classes Action, minhas classes do FormBeans, feito o mapeamento no struts-config.xml...
e chegada a hora do teste, uma mensagem de erro do além me era apresentada... descrevendo que não foi possível carregar minha classe FormBean...
fui verifiquei o mapeamento no struts-config.xml aparentemente tudo certo, porém nada de funcionar... e eis um mistério da informática!
-> um colega me resolve fazer o seguinte procedimento:
- abrir a classe do FormBean em questão, na linha na qual indicava o package, copiou a mesma....
- foi no struts-config.xml e no local que tinha a mesma string do caminha colou o caminho que havia copiado na classe...
- salvou e testou novamente...
o mais impressionante: FUNCIONOU!!!
...ainda não compreendi o que havia de diferente...
mas fica ae a dica de um procedimento para tentar resolver esse problema ;)
e chegada a hora do teste, uma mensagem de erro do além me era apresentada... descrevendo que não foi possível carregar minha classe FormBean...
fui verifiquei o mapeamento no struts-config.xml aparentemente tudo certo, porém nada de funcionar... e eis um mistério da informática!
-> um colega me resolve fazer o seguinte procedimento:
- abrir a classe do FormBean em questão, na linha na qual indicava o package, copiou a mesma....
- foi no struts-config.xml e no local que tinha a mesma string do caminha colou o caminho que havia copiado na classe...
- salvou e testou novamente...
o mais impressionante: FUNCIONOU!!!
...ainda não compreendi o que havia de diferente...
mas fica ae a dica de um procedimento para tentar resolver esse problema ;)
quarta-feira, 13 de junho de 2007
Winamp + FLV
como sou habituado a utilizar o winamp para ver/ouvir minhas músicas, fui procurar alguma forma de também utilizar o winamp para ver os videos .flv e acabei encontrando um passo a passo de como fazer isso, no forum do winamp, no respectivo post...
Obs.: tentei isso usando o Winamp Lite, mas não obtive sucesso, funcionou comigo apenas usando o Winamp Full...
- o Passo a passo:
1 - realizar o Download do FLV Slitter
Win2k/XP/Vista | Win9x
Para instalar o FLV Splitter, descompacte o conteúdo( pode ser utilizado o Winrar )
em algum lugar de fácil acesso, por exemplo: C:\FLVSplitter.ax
depois de ter o arquivo em um local de fácil acesso, vá em "Iniciar" > "Executar" e digite
o respectivo comando: regsvr32 C:\FLVSplitter.ax, na caixa de diálogo precione enter ( mande continuar... :D )
Obs.: no forum é recomendado que esse aquivo seja colocado dentro de "\Windows\System32"
*** Observação: o link para o arquivo compactado mudou, porém ainda tem o instalador do mesmo, mas não verifiquei o processo de instalação e configuração do mesmo... provavel que apenas instalando já resolva... [link]
2 - Também é necessário que você tenha instalado em seu computador o FFDShow para decodificar o conteúdo do arquivo FLV...
tendo o programa instalado em seu computador, vá em: "Iniciar" > "Programas" > ffdshow > Video decoder config > Codecs page
verifique se o item "FLV1", está setado para "libavcodec", caso esteja "disabled", clique em cima para poder mudar e escolha a outra opção...
3 - Agora no Winamp é necessário incluir o FLV na lista de Extenções, para que o Winamp "veja" os arquivos .flv,
para isso, com o Winamp aberto, vá em Preferências( ou precione Ctrl + P ) > Plugins > Input > no item: "DirectShow (in_dshow.dll)" > aperte o botão "Config"
irá abrir uma janela e nessa insira no final, após o ;AVI, ;FLV, ficando:
MPG;MPEG;M2V;AVI;FLV
depois confirme...
Pronto agora o seu Winamp também executa arquivos .flv
Obs.: esses passos são uma tradução livre do passo a passo, disponibilizado no forum do winamp, no respectivo [link]
Obs.: tentei isso usando o Winamp Lite, mas não obtive sucesso, funcionou comigo apenas usando o Winamp Full...
- o Passo a passo:
1 - realizar o Download do FLV Slitter
Win2k/XP/Vista | Win9x
Para instalar o FLV Splitter, descompacte o conteúdo( pode ser utilizado o Winrar )
em algum lugar de fácil acesso, por exemplo: C:\FLVSplitter.ax
depois de ter o arquivo em um local de fácil acesso, vá em "Iniciar" > "Executar" e digite
o respectivo comando: regsvr32 C:\FLVSplitter.ax, na caixa de diálogo precione enter ( mande continuar... :D )
Obs.: no forum é recomendado que esse aquivo seja colocado dentro de "\Windows\System32"
*** Observação: o link para o arquivo compactado mudou, porém ainda tem o instalador do mesmo, mas não verifiquei o processo de instalação e configuração do mesmo... provavel que apenas instalando já resolva... [link]
2 - Também é necessário que você tenha instalado em seu computador o FFDShow para decodificar o conteúdo do arquivo FLV...
tendo o programa instalado em seu computador, vá em: "Iniciar" > "Programas" > ffdshow > Video decoder config > Codecs page
verifique se o item "FLV1", está setado para "libavcodec", caso esteja "disabled", clique em cima para poder mudar e escolha a outra opção...
3 - Agora no Winamp é necessário incluir o FLV na lista de Extenções, para que o Winamp "veja" os arquivos .flv,
para isso, com o Winamp aberto, vá em Preferências( ou precione Ctrl + P ) > Plugins > Input > no item: "DirectShow (in_dshow.dll)" > aperte o botão "Config"
irá abrir uma janela e nessa insira no final, após o ;AVI, ;FLV, ficando:
MPG;MPEG;M2V;AVI;FLV
depois confirme...
Obs.: esses passos são uma tradução livre do passo a passo, disponibilizado no forum do winamp, no respectivo [link]
terça-feira, 12 de junho de 2007
Struts 1.3.8: problemas para usar o Tiles?
a uma semana atras após a notícia de que não poderia utilizar o Struts 2 em um novo projeto devido a alguns critérios do projeto( a ordem vem de cima e o peão resta obedecer... :P ), foi decidido que deveria ser utilizado a ultima versão do Struts 1, em questão a 1.3.8, até ae tudo bem, os problemas surgiram na hora de utilizar o Tiles...
fazendo como de costume o uso do Tiles, criei os templates do Tiles, defini o tiles-def.xml, setei no resultado da action e... nada de funcionar, mas sim me apresentou um erro falando que faltava um '/' na frente do nome do mapeamento do Tiles.
após algumas buscas e testes descobri que é necessário fazer algumas configurações para possibilitar o funcionamento do Tiles nessa versão...
bom chega de papo e vamos ao que interessa, como fazer para utilizar o Tiles nessa versão:
* foi necessário utilizar um outro xml para auxiliar o Struts 1.3.8, chain-config.xml o qual se encontra dentro do .jar do struts-tiles.jar
faça as seguintes configurações:
- web.xml
inclua o respectivo parametro da definição do servlet do Struts
- struts-config.xml
inclua o mapeamento do plugin
Referência: Struts Tiles Quick Install
fazendo como de costume o uso do Tiles, criei os templates do Tiles, defini o tiles-def.xml, setei no resultado da action e... nada de funcionar, mas sim me apresentou um erro falando que faltava um '/' na frente do nome do mapeamento do Tiles.
após algumas buscas e testes descobri que é necessário fazer algumas configurações para possibilitar o funcionamento do Tiles nessa versão...
bom chega de papo e vamos ao que interessa, como fazer para utilizar o Tiles nessa versão:
* foi necessário utilizar um outro xml para auxiliar o Struts 1.3.8, chain-config.xml o qual se encontra dentro do .jar do struts-tiles.jar
faça as seguintes configurações:
- web.xml
inclua o respectivo parametro da definição do servlet do Struts
<init-param>
<param-name>chainConfig</param-name>
<param-value>org/apache/struts/tiles/chain-config.xml</param-value>
</init-param>
- struts-config.xml
inclua o mapeamento do plugin
<plug-in className="org.apache.struts.tiles.TilesPlugin">
<set-property
property="definitions-config"
value="/WEB-INF/tiles-defs.xml"/>
</plug-in>
Referência: Struts Tiles Quick Install
terça-feira, 5 de junho de 2007
OpenLaszlo 4 Tutorial de programação
desde o dia 29/05/2007 está disponível um video tutorial de programação introdutória do OpenLaszlo 4, vale a pena conferir =]

ver
fonte: OpenLaszlo Blog
ver
fonte: OpenLaszlo Blog
quarta-feira, 30 de maio de 2007
Struts 2: Annotation Action : correção
no post anterior fiz algumas considerações baseados nos primeiros testes que realizei utilizando actions + annotations, porém hoje realizando um novo código verifiquei que é possível utilizar outros métodos alem do execute, padrão de uma classe action e também funcionou para uma POJO Action...
ps.: faltava altera uma configuração no struts.xml para habilitar os outros métodos internos dentro da classe action...
segue os novos códigos do teste agora funcionando:
/WEB-INF/[web.xml] configuração da aplicação
tendo os jar´s básicos do struts 2 e o plugin: struts2-codebehind-plugin-2.x.jar
Obs.: usando esse tipo de definição de mapeamento de action não é necessário definir nenhum mapeamento no struts.xml para as actions do pacote indicado, porém é necessário habilitar a chamada dinâmica de outros métodos internos da action( aconselho a sempre utilizar como true essa configuração )
/WEB-INF/classes/[struts.xml]
classe action
/jsp/[result.jsp]
no jsp exibe apenas a mensagem =]
agora sim funcionando corretamente...
ps.: faltava altera uma configuração no struts.xml para habilitar os outros métodos internos dentro da classe action...
/WEB-INF/[web.xml] configuração da aplicação
tendo os jar´s básicos do struts 2 e o plugin: struts2-codebehind-plugin-2.x.jar
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_S2AA" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>struts2_action_annotations</display-name>
<!-- ======= -->
<filter>
<filter-name>struts</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
<init-param>
<!-- define os pacotes que irá considerar contendo classes actions -->
<param-name>actionPackages</param-name>
<!-- para definir mais de um pacote utilize "," -->
<param-value>actions</param-value>
</init-param>
</filter>
<!-- ======= -->
<filter-mapping>
<filter-name>struts</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- ======= -->
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>Obs.: usando esse tipo de definição de mapeamento de action não é necessário definir nenhum mapeamento no struts.xml para as actions do pacote indicado, porém é necessário habilitar a chamada dinâmica de outros métodos internos da action( aconselho a sempre utilizar como true essa configuração )
/WEB-INF/classes/[struts.xml]
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<!-- habilita o uso de outros métodos de action internamente na classe action -->
<constant name="struts.enable.DynamicMethodInvocation" value="true" />
<constant name="struts.devMode" value="false" />
<!-- configuração automática -->
</struts>classe action
package actions;
import org.apache.struts2.config.Result;
import org.apache.struts2.config.Results;
@Results({
@Result(name="success", value="/jsp/result.jsp"),
@Result(name="method_1", value="/jsp/result.jsp"),
@Result(name="method_2", value="/jsp/result.jsp")
})
public class AnnotAction {
//--------------------------------------------------------------------------
private static final long serialVersionUID = 1L;
//--------------------------------------------------------------------------
private String message;
//--------------------------------------------------------------------------
public String execute() {
this.setMessage( "Success" );
return "success";
}
public String method_1() {
this.setMessage( "Method 1" );
return "method_1";
}
public String method_2() {
this.setMessage( "Method 2" );
return "method_2";
}
//--------------------------------------------------------------------------
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
//--------------------------------------------------------------------------
}/jsp/[result.jsp]
<%@ taglib prefix="s" uri="/struts-tags" %>
<center><s:property value="message"/></center>no jsp exibe apenas a mensagem =]
agora sim funcionando corretamente...
terça-feira, 29 de maio de 2007
Struts 2: Annotation Action
uma característica interessante do Struts 2 é o suporte a anotações, nesse caso vou falar sobre o suporte para definição de action...
.:verifique o post de correção desse [link]:.
segue os respectivos códigos
/WEB-INF/[web.xml] configuração da aplicação
tendo os jar´s básicos do struts 2 e o plugin: struts2-codebehind-plugin-2.x.jar
Obs.: usando esse tipo de definição de mapeamento de action não é necessário definir nenhum mapeamento no struts.xml para as actions do pacote indicado
actions.[AnnotationAction] : classe action
ps.: a página JSP de resultado da action contém nesse exemplo um texto qualquer, apenas para verificar o funcionamento da action...
considerações:
quanto a esse tipo de mapeamento verifiquei que funcionou apenas para o método execute da classe action, sendo que esta herdava de ActionSupport para ser reconhecida como uma action dentro desse pacote....
tentei acessar outros metodos internos na mesma action, mapeada dessa forma, verifiquei que o Struts 2 não localizava tais métodos...
de modo geral esse tipo de action é bom para casos de actions onde conterá apenas um método executor, no caso padrão o public String execute()...
minhas opinião final: achei esse suporte muito fraco, foi menos que minha espectativa inicial :(
/WEB-INF/[web.xml] configuração da aplicação
tendo os jar´s básicos do struts 2 e o plugin: struts2-codebehind-plugin-2.x.jar
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_S2AA" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>struts2_action_annotations</display-name>
<!-- ======= -->
<filter>
<filter-name>struts</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
<init-param>
<!-- define os pacotes que irá considerar contendo classes actions -->
<param-name>actionPackages</param-name>
<!-- para definir mais de um pacote utilize "," -->
<param-value>actions</param-value>
</init-param>
</filter>
<!-- ======= -->
<filter-mapping>
<filter-name>struts</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- ======= -->
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>Obs.: usando esse tipo de definição de mapeamento de action não é necessário definir nenhum mapeamento no struts.xml para as actions do pacote indicado
actions.[AnnotationAction] : classe action
package actions;
import org.apache.struts2.config.Result;
import com.opensymphony.xwork2.ActionSupport;
@Result(name="success", value="/jsp/success.jsp")
public class AnnotAction extends ActionSupport {
private static final long serialVersionUID = 1L;
public String execute() {
return "success";
}
}ps.: a página JSP de resultado da action contém nesse exemplo um texto qualquer, apenas para verificar o funcionamento da action...
quanto a esse tipo de mapeamento verifiquei que funcionou apenas para o método execute da classe action, sendo que esta herdava de ActionSupport para ser reconhecida como uma action dentro desse pacote....
tentei acessar outros metodos internos na mesma action, mapeada dessa forma, verifiquei que o Struts 2 não localizava tais métodos...
de modo geral esse tipo de action é bom para casos de actions onde conterá apenas um método executor, no caso padrão o public String execute()...
minhas opinião final: achei esse suporte muito fraco, foi menos que minha espectativa inicial :(
Struts 2 + Tiles 2
outra funcionalidade muito utilizada em aplicações web que reduzem o tempo de desenvolvimento referente a interface é o esquema de templates e layout de interface, no caso com Struts 2 temos 2 possibilidades/soluções que podemos utilizar para essa finalidade:
- SiteMesh
- Tiles
no caso como anteriormente tive boas experiências no uso do Tiles junto com o Struts 1, resolvi verificar como está o uso entre Struts 2 com a nova versão do Tiles 2...
um pequeno problema...
opa calma, deixa eu explica, o problema que tive inicialmente foi encontrar uma fonte que realmente contivesse a informação de como realizar a integração entre ambos, a qual fui achar somente em um forum da França, no respectivo [link]
bom vamos aos códigos agora...
[web.xml] configurando a aplicação para utilizar Struts 2 com Tiles 2
( necessário dos jar´s do Struts 2 e do Tiles 2 [usei o 2.0.3, core e api] na lib da aplicação )
WEB-INF/[tiles.xml] configuração referente ao layout/templates
ps.: nessa aplicação defini os respectivos diretório no root da aplicação:
- jsp : para os jsp´s de resultado das action
- template : para os layout de tela a ser setados no Tiles
/template/[layout.jsp] layout da tela
ps.: os outros .jsp dentro do diretório possui nesse exemplo apenas textos, indicando : [ cabeçalho, meno e rodapé ]
usando como tipo de retorno de uma action, a definição da action deverá conter o seguinte formato:
e com essas dicas já é possível iniciar o uso do Struts 2 integrado com Tiles 2 =]
- SiteMesh
- Tiles
no caso como anteriormente tive boas experiências no uso do Tiles junto com o Struts 1, resolvi verificar como está o uso entre Struts 2 com a nova versão do Tiles 2...
um pequeno problema...
opa calma, deixa eu explica, o problema que tive inicialmente foi encontrar uma fonte que realmente contivesse a informação de como realizar a integração entre ambos, a qual fui achar somente em um forum da França, no respectivo [link]
[web.xml] configurando a aplicação para utilizar Struts 2 com Tiles 2
( necessário dos jar´s do Struts 2 e do Tiles 2 [usei o 2.0.3, core e api] na lib da aplicação )
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_Struts_Tiles" version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>Struts 2 Tiles 2 - Example</display-name>
<!-- ======= -->
<filter>
<filter-name>struts</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<!-- ======= -->
<filter-mapping>
<filter-name>struts</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- ======= -->
<listener>
<listener-class>org.apache.tiles.listener.TilesListener</listener-class>
</listener>
<!-- ======= -->
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.jsp</welcome-file>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
</web-app>WEB-INF/[tiles.xml] configuração referente ao layout/templates
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE tiles-definitions PUBLIC
"-//Apache Software Foundation//DTD Tiles Configuration 2.0//EN"
"http://struts.apache.org/dtds/tiles-config_2_0.dtd">
<tiles-definitions>
<!-- definição do layout da página principal -->
<definition name="template.page" template="/template/layout.jsp">
<put name="title" value="Struts 2 + Tiles 2"/>
<put name="header" value="/template/headerMain.jsp"/>
<put name="menu" value="/template/menuMain.jsp"/>
<put name="footer" value="/template/footerMain.jsp" />
</definition>
<definition name="welcome.page" extends="template.page">
<put name="body" value="/jsp/welcome.jsp"/>
</definition>
</tiles-definitions>ps.: nessa aplicação defini os respectivos diretório no root da aplicação:
- jsp : para os jsp´s de resultado das action
- template : para os layout de tela a ser setados no Tiles
/template/[layout.jsp] layout da tela
<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<%-- atributo da request --%>
<tiles:importAttribute name="title" scope="request"/>
<%-- definição do layout --%>
<html>
<head>
<!-- recupera o atributo setado na definição do tiles.xml -->
<title><tiles:getAsString name="title"/></title>
</head>
<body>
<table width="100%" height="100%">
<tr bgcolor="yellow">
<td colspan="2">
<tiles:insertAttribute name="header" />
</td>
</tr>
<tr>
<td bgcolor="gray">
<tiles:insertAttribute name="menu" />
</td>
<td>
<tiles:insertAttribute name="body" />
</td>
</tr>
<tr bgcolor="yellow">
<td colspan="2">
<tiles:insertAttribute name="footer" />
</td>
</tr>
</table>
</body>
</html>ps.: os outros .jsp dentro do diretório possui nesse exemplo apenas textos, indicando : [ cabeçalho, meno e rodapé ]
usando como tipo de retorno de uma action, a definição da action deverá conter o seguinte formato:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="base" extends="struts-default">
<result-types>
<result-type name="tiles" class="org.apache.struts2.views.tiles.TilesResult" />
</result-types>
<action name="index">
<result type="tiles">welcome.page</result>
</action>
</package>
</struts>e com essas dicas já é possível iniciar o uso do Struts 2 integrado com Tiles 2 =]
Struts 2: Saída de stream com parametros dinâmicos
usando o novo framework Struts 2, depois de um tempo brigando com a falta de conhecimento finalmente consegui montar uma action onde seto dinâmicamente os parametros para a definição do result
observe os respectivos códigos:
java: classe action
respectivo mapeamento da action com definição dos parametros do result, tipo stream dinâmicos
* Observe: que os parametros definidos no mapeamento da action são respectivamente os mesmo nomes dos atributos da classe action...
observe os respectivos códigos:
java: classe action
import java.io.ByteArrayInputStream;
import java.io.InputStream;
public class DynamicStreamAction {
//--------------------------------------------------------------------------
// parametros para uso na saída da action
private String contentType;
private int contentLength;
private String contentDisposition;
// definição da saída do stream
private InputStream myStream;
//--------------------------------------------------------------------------
public String execute() {
// definindo o tipo de conteúdo
this.setContentType( "application/xml" );
// definindo que será em anexo( solicitará o salvamento do arquivo )
this.setContentDisposition( "attachment; filename=XmlAction.xml" );
// definindo o XML de saida
String xml = "<tag>xml teste de saída áéíóú ç à...</tag>";
// setando o stream para o tributo
this.setMyStream( new ByteArrayInputStream( xml.getBytes() ) );
// definindo o tamanho do contentLength
this.setContentLength( xml.getBytes().length );
return "success";
}
//--------------------------------------------------------------------------
// get´s & set´s
}respectivo mapeamento da action com definição dos parametros do result, tipo stream dinâmicos
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="stream" namespace="/stream" extends="struts-default">
<action name="dynamic" class="stream.DynamicStreamAction">
<result name="success" type="stream">
<param name="inputName">myStream</param>
<param name="contentType">${contentType}</param>
<param name="contentDisposition">${contentDisposition}</param>
<param name="contentLength">${contentLength}</param>
</result>
</action>
</package>
</struts>* Observe: que os parametros definidos no mapeamento da action são respectivamente os mesmo nomes dos atributos da classe action...
sexta-feira, 25 de maio de 2007
Model Driven
nos ultimos tempos, nos atuais frameworks web MVC java tenho visto falar muito sobre Model Driven, mas na prática compreender como que isso se encaixa em um framework MVC fica meio obscuro...
em si a minha compreensão vendo essa característica em uma aplicação web, foi a possibilidade de facilitar o desenvolvimento e trabalhar uma interface baseada em modelos...
* observando na aplicação showcase do Struts 2, por exemplo, facilita o entendimento da aplicação prática de Model Driven.
essa aplicação está disponível junto do struts-2.0.6-all.zip no diretório apps
links para leitura sobre o assunto:
- OMG - Model Driven Architecture
- IMB - An introduction to Model Driven Architecture
- Dataware - MDA (Model Driven Architecture)
- MundoOO - Java e Model Driven Architecture (MDA)
- Portal Java - MDA - Model Driven Architeture
- JavaPro - Java and the Model Driven Architecture
em si a minha compreensão vendo essa característica em uma aplicação web, foi a possibilidade de facilitar o desenvolvimento e trabalhar uma interface baseada em modelos...
* observando na aplicação showcase do Struts 2, por exemplo, facilita o entendimento da aplicação prática de Model Driven.
essa aplicação está disponível junto do struts-2.0.6-all.zip no diretório apps
links para leitura sobre o assunto:
- OMG - Model Driven Architecture
- IMB - An introduction to Model Driven Architecture
- Dataware - MDA (Model Driven Architecture)
- MundoOO - Java e Model Driven Architecture (MDA)
- Portal Java - MDA - Model Driven Architeture
- JavaPro - Java and the Model Driven Architecture
Marcadores:
Desenvolvimento,
Design Patterns,
Framework,
JAVA,
Web
Struts 2: começando
para quem está começando utilizar o Struts 2, recomendo olhar os respectivos links:
- WebWork (Struts 2) In Action [apresentação]
- Starting Struts 2 [e-book]
material em ingles...
- WebWork (Struts 2) In Action [apresentação]
- Starting Struts 2 [e-book]
material em ingles...
Assinar:
Postagens (Atom)