sexta-feira, 29 de abril de 2011

Olá Mundo com Struts2 e NetBeans

Olá galerinha!!

Vamos pra mais um Hello World, agora com o Struts2. Pra comecar crie um novo projeto no NetBeans (estou usando no Linux, aqui no Foojava tem um post que ensina instalar tudo certinho), segue -> JavaWeb -> Aplicacao Web, de o nome de HelloStruts, estou a utilizar servidor Tomcat 6.0.26 e Java EE 5, no passo 4 selecione o framework Struts2 e desmarque a opcao de Criar pagina de exemplo, caso contrário o hello world já vem pronto de exemplo, sacanagem!

Segue imagens dessa primeira parte pra ajudar vocês que ficaram com alguma dúvida nessa primeira parte.




Bom, projeto criado, vamos editar o arquivo index.jsp que foi criado junto com o projeto, este arquivo está marcado para ser sua página inicial no arquivo web.xml. Dentro do index coloque o seguinte código:

<%-- 
    Document   : index
    Created on : 28/04/2011, 20:55:03
    Author     : bolivar
--%>

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<%-- Adicione essa taglib para usar as tags do Struts --%>
<%@taglib uri="/struts-tags" prefix="s" %>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>
        <s:form action="Hello">
            <s:textfield name="nomeUsuario" label="Seu nome" />
            <s:submit />
        </s:form>
    </body>
</html>

Perceba que no início da página foi adicionado uma linha de código que inclui as tags especiais do Struts, para usar essas tags devemos adicionar o prefixo s: nas tags, é interessante dar uma olhada nessas tags, o NetBeans tem um autoComplete que msotra todas as tags possíveis de serem utilizadas. Essas tags serão substituidas por tags HTML normais quando o projeto for executado, em tempo de execução/compilaçao, não tenho bem certeza.

Crie agora mais duas páginas JSP, chame uma de sucesso.jsp e outra de erro.jsp.


 Na página de erro coloque apenas HTML normal com uma mesangem de erro e link para volar ao início.
<%-- 
    Document   : erro
    Created on : 28/04/2011, 21:08:18
    Author     : bolivar
--%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Primeiro Hello Struts</title>
    </head>
    <body>
        <p>
            Erro: Campo nome nao pode ser vazio, informe seu nome!<br><br>
            <a href="index.jsp">clique aqui pra voltar</a>
        </p>
    </body>
</html>

Na página de sucesso vamos utilizar novamente a taglib do Struts2, para exibir uma mensagem de Ola.
<%-- 
    Document   : sucesso
    Created on : 28/04/2011, 21:06:57
    Author     : bolivar
--%>

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">
<%@taglib uri="/struts-tags" prefix="s" %>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Primeiro Hello Struts</title>
    </head>
    <body>
        <h1><s:property value="mensagem" /></h1>
    </body>
</html>

Bom, até agora temos duas variáveis/propriedades para trabalhar, uma está na index.jsp que é o nomeUsuario e outra na página de sucesso que é a mensagem. Para manipularmos estes campos vamos criar uma classe Java que será a nossa Action, crie uma classe java dentro de um novo pacote chamado acoes. De o nome para a nova classe de HelloAction.



Criado a classe HelloAction, dentro de um pacote acoes, coloque o seguinte código.

package acoes;

/**
 * @author bolivar
 */
public class HelloAction {

    private String Mensagem;
    private String nomeUsuario;

    public String execute() {
        if (getNomeUsuario().length() > 0)
        {
            setMensagem("Ola " + getNomeUsuario());
            return "SUCESSO";
        } else
        {
            return "ERRO";
        }
    }

    /**
     * @return the Mensagem
     */
    public String getMensagem() {
        return Mensagem;
    }

    /**
     * @param Mensagem the Mensagem to set
     */
    public void setMensagem(String Mensagem) {
        this.Mensagem = Mensagem;
    }

    /**
     * @return the nomeUsuario
     */
    public String getNomeUsuario() {
        return nomeUsuario;
    }

    /**
     * @param nomeUsuario the nomeUsuario to set
     */
    public void setNomeUsuario(String nomeUsuario) {
        this.nomeUsuario = nomeUsuario;
    }
    
}

Esta classe estamos criando duas variáveis String que correspondem aos nossos elementos nas JSP, nomeUsuario e mensagem, implementamos os métodos GET e SET para definir valores e recuperar os valores dessas propriedades e criamos uma função chamada execute(), que é o método padrão das actions dentro do Struts.

Dentro desse método execute() nós verificamos se foi preenchido o campo nomeUsuario, em caso TRUE nós setamos a propriedade mensagem com o valor 'Olá ' e concatenamos com nome informado pelo usuário que está na propriedade nomeUsuario, tudo certo, retorna 'SUCESSO', este retorno é muito importante, não é necessário ter o nome 'sucesso', mas precisa existir para mapearmos dentro do struts depois.

No caso do usuário não ter digitado o seu nome, o método vai retornar 'ERRO'.

Muito bem, vamos para nossa parte final do Hello World, é impressão minha ou fazer um hello em Struts é super complicado? hehe Seguindo, agora só nos falta relacionar tudo isso dentro do arquivo de configuração struts.xml, o código abaixo simples e comentadinho.

<struts>
    <!-- Configuration for the default package. -->
    <package name="default" extends="struts-default">
        <!-- Configura as actions, o name é o que esta sendo chamada no form da index.jsp,
 class é local da action a ser executada e adicionei também o method execute, 
isso não é necessário quando o método tem este nome, mas se tivesse outro nome como remover, listar... ai seria necessário -->
        <action name="Hello" class="acoes.HelloAction" method="execute">
            <!-- Configura os resultados da action, em caso da funçao retornar SUCESSO 
vai ir para pagina JSP sucesso, caso de ERRO vai para erro.jsp -->
            <result name="SUCESSO">/sucesso.jsp</result>
            <result name="ERRO">/erro.jsp</result>
        </action>

    </package>
</struts>

Bom pessoal, basicamente é isso ai, para ver o Hello com Struts funcionando basta executar o projeto agora e correr pro abraço. A estrutura do projeto ficou igual a imagem abaixo.


Até mais!