Java for Dinner

Um repositório sobre Java e tudo que gira ao redor dele.

  • Arquivos

  • Top Clicks

    • Nenhum

Archive for the ‘Wicket’ Category

Mudando o local default dos arquivos no Apache Wicket

Posted by Danilo Barsotti em 28 janeiro, 2008

Como foi falado no artigo anterior, quando criamos uma classe que representa uma pagina ( estende WebPage ) o arquivo .html deve estar no mesmo package da classe por default, mas isso nem sempre ( na maioria das vezes ) é algo muito bom de se fazer, pois um projeto pode ter diversos packages, imagine varios deles com arquivos .html, imagens, .js entre outros, não ficaria algo muito agradavel de se trabalhar e organizar.

Como não gostava disso fui dar uma pesquisada e descobri que quando se quer configurar como o wicket usa os recursos ( .html, .css, .js entre outros ) basta estender a classe ResourceStreamLocator, vejam como essa classe é feita:

import org.apache.wicket.util.resource.IResourceStream;
import org.apache.wicket.util.resource.locator.ResourceStreamLocator;

public class PathStripperLocator extends ResourceStreamLocator{

    public PathStripperLocator() {
    }

    public IResourceStream locate(final Class clazz, final String path) {
        IResourceStream located = super.locate(clazz, trimFolders(path));
        if (located != null) {
            return located;
        }
        return super.locate(clazz, path);
    }

    private String trimFolders(String path) {
        return path.substring(path.lastIndexOf(“/”) + 1);
    }
}

E para usala, é só chamar no método init() da classe que estende WebApplication que no nosso caso é a classe JavaForDinnerApplication ( caso você não esteja acompanhado os artigos, recomendo a leitura do artigo Começando com o Apache Wicket ) como é mostrado abaixo:

    @Override
    protected void init() {
        super.init();
        this.configResourceFolder();
    }
    private void configResourceFolder(){
        IResourceSettings resourceSettings = getResourceSettings();
        resourceSettings.addResourceFolder(“/WEB-INF/”); // O local onde os arquivos .html,imagens e todo o restante vão estar.
        resourceSettings.setResourceStreamLocator(new PathStripperLocator());       
    }

Como podem ver, configurei para os arquivos .html, .css, .js e todos os outros necessarios vão ser encontrados na pasta WEB-INF.

Até a proxima!!!

Anúncios

Posted in Wicket | 4 Comments »

Começando com o Apache Wicket.

Posted by Danilo Barsotti em 26 janeiro, 2008

Bom pessoal, hoje vou dar inicio a uma serie de posts sobre essa framework, o Apache Wicket.
Wicket é uma framework web ( como o Struts, JSF, Mentawai entre outros 859664 milhões de frameworks ) que possui um estilo de programação “ala” Swing, possui uma curva de aprendizado bem pequena, é prazeroso e usa pouca configuração em .xml para que o programa funcione perfeitamente.
Aqui segue um lista dos pontos principais do Wicket:

1. Utiliza POJO ( http://pt.wikipedia.org/wiki/Plain_Old_Java_Objects ).
2. O código é escrito de uma forma “ala” Swing.
3. Resolve os problemas do botão voltar do navegador automaticamente.
4. Mensagens de erros fáceis de se entender e corrigir.
5. Os componentes escritos utilizando o Wicket são totalmente reutilizáveis e podem ser distribuídos em um .jar .
6. Não é intrusivo
7. Compatível com qualquer editor HTML.
8. Entre outras coisas… ( http://wicket.apache.org/introduction.html )

Agora depois de tantas apresentações, vou começar a demonstrar o poder dessa framework.
Eu sei que todo site e blog mostra como iniciar um projeto do zero utilizando o wicket, e eu não vou ser diferente pois acho que apesar de se encontrar essa informação em todo lugar, no javaForDinner não existe, sendo assim:
Você pode criar o seu projeto de 2 maneiras, a primeira é utilizando o Maven e a segunda é fazer na unha, vamos na unha mesmo.

O primeiro passo é fazer o download do wicket , SLF4J e do Log4j. E caso você ainda não tenha um container sugiro o tomcat ou jetty, nesse artigo eu uso o tomcat.
Depois que os downloads foram concluídos, abra o .zip do wicket, entre na pasta lib e adicione o arquivo wicket-1.3.0.jar em seu projeto, ele é a lib principal, onde se encontra todo o core do wicket e todo o mínimo necessário para que se consiga fazer um sistema.
Abra o .zip do SLF4J e copie os arquivos slf4j-log4j12-1.4.2.jar e slf4j-api-1.4.2.jar para o seu projeto.
Abra o .zip do Log4j e copie o arquivo log4j-1.2.15.jar para o seu projeto também.
Pronto, todos as libs necessárias para iniciarmos nosso projeto já estão prontas. Não vou mostrar como adicionar essas libs em seu projeto web pois isso é uma coisa comum que a maioria das pessoas conhecem e também para não sairmos do foco do artigo.
Dentro da pasta WebContent /WEB-INF crie/edite o arquivo web.xml com as seguintes informações:


<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app 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"
version="2.4"><display-name>JavaForDinner</display-name>
<context-param>
<param-name>configuration</param-name>
<param-value>development</param-value>
</context-param>
<filter><filter-name>javafordinner</filter-name>
<filter-class>org.apache.wicket.protocol.http.WicketFilter</filter-class>
<init-param>
<param-name>applicationClassName</param-name>
<param-value>br.com.javafordinner.JavaForDinnerApplication</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>javafordinner</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
</web-app>

Pronto, essa é a unica configuração que é feita atravéz de um xml, o restante agora é só java 🙂
Crie uma classe com o nome de JavaForDinnerApplication no pacote br.com.javafordinner e escreva o código a seguir nela:


public class JavaForDinnerApplication extends WebApplication
{
/**
* Constructor
*/
public JavaForDinnerApplication()
{
   super();
}

public Class getHomePage()
{
   return Index.class;
}

@Override
protected void init() {
   super.init();
}

}

Essa classe representa a sua aplicação como se fosse um “public static void main(String args[]) em uma aplicação desktop, é ela que da o start e configura a aplicação.
Vou explicala em detalhes:

WebApplication
A classe que representa a aplicação tem que estender a WebApplication, pois quando iniciamos o servidor, ele vai procurar pela classe que declaramos no web.xml, a classe que representa a aplicação.

public Class getHomePage()
Vou mostrar o codigo da classe Index a seguir, mas por hora, essa classe representa a pagina principal da aplicação, que no caso, é a Index.html.

protected void init()
Aqui setamos todas as configurações necessarias em nossa apliacação, como setar o local padrão dos arquivos css, html entre outras coisas. No momento não existe nenhuma configuração especial, então
só é chamado o super.init() para gerar a configuração default.

Agora vamos criar a classe que representa nossa pagina inicial, crie uma classe chamada Index no pacote br.com.javafordinner.view.pages.Index e escreva o código a seguir:


/**
* Homepage
*/
public class Index extends WebPage {

private static final long serialVersionUID = 1L;

public Index(final PageParameters parameters) {
   add(new Label("label", "Olá Java for Dinner!!!"));
}

}

Explicando:

Toda classe que representa uma pagina da web deve extender a classe WebPage.
Quando seu construtor é criado recebendo paramentros, isso indica ao Wicket que essa pagina não usa a session do servidor por default.

Agora crie um html no mesmo pacote da classe Index ( br.com.javafordinner.view.pages ) com o nome de Index.html e escreva o código a seguir:


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
</head>
<body>
<span wicket:id="label"></span>
</body>
</html>

Reparem que exite um span com uma marcação “wicket:id=”label”, esse id=”label” representa o Label da classe Index.

Veja a imagem abaixo o resumo:

Clique aqui e veja uma imagem resumindo o fluxo que seguimos.

O label no html vai ser substituído pelo “Olá Java for Dinner!!!” da classe Index.Agora é só iniciar o servidor e acessar o endereço http://localhost:8080/javafordinner/ e pronto, você ira ver a mensagem .

Nos próximos artigos vamos nos aprofundar mais montando nossos componentes customizados, mudar o comportamento do Wicket entre outras coisas.

Até a próxima!!

Posted in Wicket | Etiquetado: , | 6 Comments »