Conheça também: Onmasters . Ofertas . Divulgue! . Vai.la . Geraboleto . Baixa.la . Assista.la . Joga.la
» Início » Programação » Framework MVC: Apache Struts ou JavaServer Faces? parte 3 -->
 
Avaliação: | Publicado em: 05/09/2005
Framework MVC: Apache Struts ou JavaServer Faces? parte 3
Givanildo Santana do Nascimento Givanildo é Bacharel em Sistemas de Informação, Sun Certified Web Component Developer for J2EE Platform, Sun Certified Java 2 Platform Programmer 1.4, Analista de Sistemas na Secretaria da Fazenda de Sergipe. Arquiteto J2EE da ITX Tecnologia da Informação. Publicou artigos em revistas como a Mundo Java e apresentou palestras em eventos como Just Java 2005 e III Borland Conference.


Olá Pessoal,

Desculpa a demora, vamos retorna a 3 º Parte do artigo anterior : Framework MVC: Apache Struts ou JavaServer Faces?

Vamos lá...

Para Saber Mais

Uma ótima referência sobre JSF encontra-se no “The J2EE 1.4 Tutorial”, do capítulo 17 ao 21. O J2EE 1.4 Tutorial está disponível na Internet no endereço http://java.sun.com/j2ee/1.4/docs/tutorial/doc/

E agora? Qual será a sua escolha?

Tanto Struts como JSF suportam operações básicas de navegação entre páginas, validação e internacionalização. No entanto, o JSF destaca-se pelo seu modelo de componentes de interface e eventos processados no servidor.

Para que interfaces de usuário complexas sejam desenvolvidas nas tecnologias tradicionais, como Servlets, JSPs e até mesmo Struts, faz-se necessária a implementação de bastante código nas páginas, a fim de apresentar os dados e tratar os eventos do usuário. Em uma implementação JSF, os elementos de interface são representados por componentes padronizados e as ações do usuário são representadas por eventos manipulados pela aplicação no lado servidor. Este tipo de modelo de componentes baseado em eventos tornou fácil o desenvolvimento de complexas interfaces de aplicações desktop durante os últimos anos e pode também simplificar o desenvolvimento WEB.
Alguns autores defendem uma utilização híbrida do Apache Struts e do JSF, como se eles fossem complementares. Segundo eles, um cenário ideal seria utilizar componentes de interface JSF em aplicações Struts. Entretanto, o JSF possui suporte a todas as etapas existentes desde a origem da requisição até a geração do conteúdo de resposta. Uma abordagem híbrida, na qual JSF e Struts trabalham de forma complementar, pode ser muito interessante para a migração gradual de aplicações Struts para a tecnologia JSF, mas para o desenvolvimento de novas aplicações, em geral, o JSF é mais recomendado. A migração de Struts para JSF pode começar pela substituição das tags Struts HTML por componentes JSF, com o auxílio do projeto struts-faces (ver referências).
As listagens 4 e 5 mostram dois códigos de implementação de uma mesma página de catálogo de produtos em uma aplicação de comércio eletrônico. O código da listagem 4 baseia-se em Struts, enquanto o da listagem 5 baseia-se em JSF. Observe que no primeiro exemplo, a página é composta por tags HTML simples, tags do Struts e chamadas JavaScript. Já o segundo exemplo, é composto por algumas poucas tags HTML simples e vários componentes JSF.

Listagem 4. Página Struts para exibição do catálogo de produtos

<%--
* Title: Mundo Java – Catálogo de Produtos.
* Description: Catálogo de produtos baseado em MVC e Struts
* Página: Catálogo de produtos.
--%>

<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic"%>
<%@ taglib uri="/WEB-INF/struts-bean.tld"  prefix="bean" %>
<%@ taglib uri="/WEB-INF/struts-html.tld"  prefix="html" %>

<html:html>
  <head>
    <title>Catálogo de Produtos</title>
    <html:base/>
  </head>
  <body>

    <h2 align="center">Catálogo de Produtos</h2>
    <center><b>
Escolha o produto desejado na lista abaixo. Boas compras!</b></center>
    <br/><br/>

<table border="0" cellspacing="5" cellpadding="1" width="100%">      <%-- Cria uma tabela com todos os itens do catálogo. --%>
      <logic:iterate id="produto" name="catalogo">
        <tr><td colspan="3"><hr></td></tr>
        <tr>
          <td
width="30%"><img src='<bean:write name="produto" property="imagem"/>' width="210"></td>
          <td
width="50%">
            <table border="0" cellpadding="5">
              <tr>
                <td
colspan="2" align="center"><font size="5px">
<b><bean:write name="produto" property="nome" />
</b></font></td>
</tr><tr>
  <td
valign="top"><b>Descrição:</b></td>
                <td><bean:write
name="produto" property="descricao" /></td>
              </tr>
              <tr>

                <td><b>Preço:</b></td>
                <td>
R$ <bean:write name="produto" property="preco" /></td>
              </tr>
            </table>
          </td>

          <%-- Links para adição de itens no carrinho de compras. --%>
          <td align="center">
            <html:link page="/carrinho.do?method=adicionarItem"
paramName="produto" paramId="id" paramProperty="produtoId">
              <image src="imagens/carrinho.jpg" height="40" border="0">
            </html:link>
          </td>
        </tr>
      </logic:iterate>
      <tr>
        <td
colspan="3"><hr></td>
      </tr>
    </table>
<br><br>


    <%-- Exibe os botões para acesso ao carrinho de compras e ao cadastro de produtos. --%>
    <center>
      <input
type="button" value="Carrinho" onClick="javascript:document.location='carrinho.do?method=visualizar'">
      <input type="button" value="Cadastro" onClick="javascript:document.location='cadastroProdutos.do?method=listar'">
    </center>
  </body>
</html:html>

Listagem 5. Página JSF para exibição do catálogo de produtos.

<%--
* Title: Mundo Java – Catálogo de Produtos.
* Description: Catálogo de produtos baseado em MVC e JSF
* Página: Catálogo de produtos.
--%>


<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>

<html>
  <head>
    <title>
Loja Virtual</title>
  </head>
  <f:view>
    <h2
align="center">
      <h:outputText id="texto1" value="Catálogo de Produtos"/>
    </h2>
    <center><b>
<h:outputText
id="texto2" value="Escolha o produto desejado na lista abaixo. Boas compras!">
    </h:outputText></b></center>
    <br/><br/>
    <h:messages/>
    <h:form
id="form">      <%-- Obtém e exibe os produtos em uma tabela --%>
<h:dataTable id="dtCatalogo" value="#{catalogo.catalogo}"
var="produto" border="0" cellspacing="5" cellpadding="1" width="100%" >        <%-- Imagem do produto. --%>
        <h:column>
          <h:graphicImage
url="#{produto.imagem}" width="210" alt="#{produto.nome}" />
        </h:column>
        <%-- Nome, descrição e preço do produto. --%>
        <h:column>
          <h:panelGrid columns="1">
            <h:outputText value="#{produto.nome}"/>
            <h:panelGrid columns="2">
              <h:outputText value="Descrição: "/>
              <h:outputText value="#{produto.descricao}"/>
              <h:outputText value="Preço: "/>
              <h:outputText value="#{produto.preco}">
                <f:convertNumber type="currency"/>
              </h:outputText>
            </h:panelGrid>
          </h:panelGrid>
        </h:column>
        <%-- Link para adicionar o produto no carrinho. --%>
        <h:column>
          <h:commandButton image="imagens/carrinho.jpg" action="#{carrinhoBean.adicionarItem}"/>
        </h:column>        <%-- Botões para acessar o carrinho e o cadastro. --%>
        <f:facet name="footer">
          <h:panelGroup>
             <center>

               <h:commandButton value="Carrinho" action="carrinho"/>
               <h:commandButton value="Cadastro" action="listarProdutos"/>
            </center>
          </h:panelGroup>
        </f:facet>
      </h:dataTable>
    </h:form>
  </f:view>
</html>

O JSF faz tudo o que o Struts se propõe a fazer e ainda oferece um poderoso modelo de componentes. Sendo assim, o JSF tende a ser o substituto natural do Struts em médio prazo. Entretanto, como existem muitos projetos baseados no Struts, será necessária a coexistência dos dois frameworks por muito tempo, bem como a criação de mecanismos de interoperabilidade entre eles.
O grande diferencial do JSF é o seu modelo de componentes e eventos. Porém, os componentes ainda são muito limitados, escassos e é fundamental a utilização de uma ferramenta gráfica para a criação das páginas.

Considerações Finais

Como dissemos no início deste artigo, não existe “receita de bolo” para a escolha de um framework MVC. No entanto, classificamos algumas características de projetos que podem ajudar nesta escolha.
Para aplicações já desenvolvidas em Struts, atualmente em fase final de desenvolvimento ou já em manutenção, o melhor é continuar acompanhando a evolução deste framework maduro da Apache Software Foundation. O mesmo acontece para aplicações em pleno desenvolvimento em Struts. Considere que uma troca de framework no meio do projeto trará implicações na produtividade da equipe de desenvolvimento e, conseqüentemente, em seu cronograma.
Se você está diante de um novo projeto, se não utiliza um framework MVC ou se está insatisfeito com o que está utilizando, recomendamos fortemente o JSF. Entretanto, é aconselhável que antes de começar a implementar em JSF você escolha uma boa IDE para auxiliar o desenvolvimento das páginas. Algumas ferramentas disponíveis no mercado já oferecem suporte integral ao JSF. Escolhida a ferramenta, é preciso capacitar a sua equipe para que ela tire o melhor proveito do JSF e de seus poderosos componentes.

Referências

Autores

“Givanildo Santana do Nascimento” (givanildose@hotmail.com) é Sun Certified Web Component Developer for J2EE Platform, Sun Certified Java 2 Platform Programmer, Bacharel em Sistemas de Informação pela Universidade Tiradentes-SE, Analista de Sistemas na SEFAZ/SE, Arquiteto J2EE na ITX Tecnologia da Informação (www.itx.com.br) e estuda música nas horas vagas. Na ITX, Givanildo está orientando a aderência da ferramenta Web Integrator a tecnologias como JSF e EJB 3.0. Veja detalhes em www.webintegrator.com.br.

“Andrés Ignácio Martínez Menéndez” (andres@unit.br) é Mestre em Informática pela Universidade Federal de Campina Grande, Gerente de Projetos e Tecnologia na SEFAZ/SE e Professor de graduação e pós-graduação na Universidade Tiradentes-SE.

Abraço e bons estudos.

Este artigo é a parte 3 de 3 da seguinte série:

Gerson Rabelo <gersonfelipe@yahoo.com.br>
Além de introduzir o assunto de forma clara a conclusão é excelente. Obrigado.
Parabéns pelo artigo! Muita qualidade de exemplificado de forma clara.
Fábio Augusto <fferreiracarvalho@gmail.com>
Excelente o seu artigo parabens
Sergio Rezende <sergiolcrezende@gmail.com>
Ótimo artigo.

pedro
Muito obrigado.
Andressa
Excelente a explicação!!

Obrigada pela ajuda!!
Abraços
Oswaldo Castro <ogcastro@terra.com.br>
Perfeito!
Claro, direto e objetivo como todo texto de informática deveria ser
Parabéns
Márcio Gonçalves <gomes@metha.com.br>
Muito obrigado!