Esse artigo faz parte da revista WebMobile edição 17. Clique aqui para ler todos os artigos desta edição

imagem.JPG

="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"> 

A internet está se tornando uma importante e indispensável ferramenta para dispositivos móveis. Ela pode ser usada das mais diversas formas, seja como entretenimento através de jogos ou downloads disponíveis na web, como ambiente de compra e vendas on-line (hoje em dia tão comum) ou como ambiente para prestação de serviços, como sites de bancos. Porém, um problema constante para os desenvolvedores é “mover” uma aplicação web para os dispositivos móveis, pois a maioria dos celulares não reconhece HTML.

A Microsoft tem controles móveis que podem fazer a transferência de páginas ASP.NET para dispositivos móveis, no entanto, sistemas desenvolvidos em Java não tinham este controle. O Java EE é o padrão dominante na construção de sistemas web, por dispor de vários frameworks com ótimos componentes, tais como, o JavaServer Faces (JSF), o Tomahawk, o Ajax4JSF e outros, mas por não contar com tal controle, tornava a construção de sistemas web móveis extremamente trabalhosos.

 Pensando nisso, a Ericsson desenvolveu uma plataforma chamada MobileFaces, a qual será apresentada nesse artigo.

Conhecendo o MobileFaces

O MobileFaces é um framework de controle que pode fazer a conversão de páginas da web para dispositivos móveis e vice-versa. Ele é um projeto Open-Source, aceitando assim, modificações dos usuários em seus códigos. Antes do MobileFaces, o programador que desejasse construir uma aplicação web com Java, tanto para Web browsers, quanto para Mobile browsers era obrigado a replicar suas páginas web utilizando wml (linguagem interpretada por Mobile browsers). Com este framework isto se torna desnecessário, pois o MobileFaces faz a conversão do código de acordo com browser em que está sendo interpretado, ou seja, se for um Web browser, seu código torna-se um HTML, e se for um Mobile browser, seu código torna-se um WML.

 Este Framework é baseado na arquitetura do JavaServer Faces, como é mostrado na Figura 1, e é compatível com qualquer implementação do JSF. Para isso, contém adaptadores de mídia, conversores de imagens, filtros, entre outros, sempre visando a melhor adaptação das aplicações web para dispositivos móveis.

 

Figura 1 – Arquitetura do MobileFaces

 

O MobileFaces é composto de vários kits de desenvolvimento, entre eles:

·         Mobile JSF: Pacote desenvolvido para construção de aplicações com JavaServer Faces (JSF);

·         MobileSecurity: Pacote desenvolvido para aplicar autorizações e autenticações para aplicações web móvel, tais como, autenticar sua aplicação de acordo com o protocolo SSL (Secure Sockets Layer), ler Nota 1;

·         MobileAjax: É um pacote que combina o uso do Ajax com o JSF, permitindo assim aplicações móveis com o uso de Ajax;

·         MobilePortlet: Mostra como usar uma aplicação Portlet, empregando as soluções móveis do MobileFaces.

 

Nota 1. SSL – Secure Sockets Layer

 O protocolo SSL é uma tecnologia de segurança comumente utilizada para codificar os dados trafegados entre o computador do usuário e o um website. Este protocolo, através de um processo de criptografia dos dados, previne que os dados trafegados possam ser capturados, ou mesmo alterados no seu curso entre o navegador (browser) do usuário e o site com o qual ele está se relacionando. Isto garante a segurança entre a troca de informações sigilosas como os dados de cartão de crédito.

 

Agora faremos uma breve apresentação do JavaServer Faces(JSF), para podermos falar do Mobile JSF.

O que é o JavaServer Faces (JSF)?

O JSF é um framework MVC que foi projetado para simplificar o desenvolvimento de aplicações Web. Você deve estar se perguntando, “o que é MVC?”.

O MVC é um padrão de arquitetura de aplicações que visa separar a lógica da aplicação (Model), da interface do usuário (View) e do fluxo da aplicação (Controller), permitindo assim, que a mesma lógica de negócios possa ser acessada e visualizada por várias interfaces.

Diversos frameworks foram desenvolvidos com o intuito de ajudar o programador a implementar o padrão MVC, entre eles estão o Struts, Web-Work, Spring-MVC e o JSF.                  

Além de uma clara separação entre a visualização e a regra de negócio, o JSF incorpora um modelo de interfaces gráficas baseado em eventos e recursos de navegação e internacionalização.

O JSF utiliza componentes GUI (Graphical User Interface) semelhantes aos do pacote Swing/AWT, como botões, formulários, caixas de texto, etc.

Para mais informações sobre o JSF, acesse http://java.sun.com/javaee/javaserverfaces.

E como o MobileFaces é associado ao JSF?

Da seguinte forma, você pode construir seu sistema Java EE normalmente, utilizando o JSF. Após aplicar o MobileFaces, ele interpreta suas páginas de acordo com as necessidades do browser de cada dispositivo, “re-codificando” suas páginas, como é mostrado na Figura 2.

 

Figura 2 – Comportamento das aplicações desenvolvidas com o MobileFaces

 

Arquivos de configuração do sistema

Sistemas Java para web contam com um arquivo de configurações padrão, o web.xml. Todas as configurações referentes ao sistema constam nesse arquivo, por exemplo, tempo de duração de uma sessão, página inicial da aplicação, mapeamento de servlets e filters, etc. Na Listagem 1 é apresentado como deve ficar o arquivo web.xml com o trecho de configuração do mapeamento do servlet JSF (linhas 3 a 11) e do tempo da seção (linha 13).

 

1.      < ?xml version="1.0" encoding="UTF-8"?>

2.      < web-app 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">

3.      < servlet>

4.         < servlet-name>Faces Servlet

5.         < servlet-lass>javax.faces.webapp.FacesServlet

6.         < load-on-startup>1

7.     

8.      < servlet-mapping>

9.         < servlet-name>Faces Servlet

10.  < url-pattern>*.jsf

11. 

12.  < session-config>

13.     < session-timeout>30

14. 

15. 

Listagem 1. Arquivo web.xml da aplicação

 

Aplicações que utilizam o framework JSF contam também com outro arquivo de configurações, o faces-config.xml (ver Listagem 2), que por sua vez, tem todos os mapeamentos de classes, ações, páginas, etc. A declaração de objetos é feita nesse arquivo, através dos managed-beans (MB), objetos que podem ter suas propriedades alteradas na aplicação web.

Um managed-bean também é chamado de backing bean, pois contém os dados e os métodos que serão executados quando algum dos componentes JSF tiver que executar uma ação. Esses managed-beans recebem o nome do objeto através da tag (linha 7, Listagem 2), a classe referente a esse objeto pela tag (linha 8) e, por fim, recebe o escopo desse objeto através da tag (linha 9). Por exemplo, você tem uma classe chamada Livro.java, e você deseja trabalhar com um objeto dessa classe durante a aplicação, seja salvando, alterando ou excluindo. Você declararia seu managed-bean com o nome desejado, por exemplo, LivroMB. Definiria a classe a que esse objeto faz referência, no exemplo, Livro.java e, terminando a declaração do MB, você definiria seu escopo de visualização, podendo ser session (seção), onde o estado é mantido enquanto durar a sessão, request (requisição), onde cada requisição é um novo estado ou  application, onde o estado é mantido até que a aplicação morra.

É através do arquivo faces-config.xml que podemos mapear nossas ações ou páginas. Para mapear a página podemos fazer com que um método retorne uma String e mapear a página para quando receber essa String, abrir uma nova página. Por exemplo, você tem uma página de cadastros. O seu método salvar deverá retornar a String “sucesso”, se a ação for concluída com êxito e “falha”, caso contrário. A partir desse ponto, você pode configurar sua aplicação para que abra a página x, se receber uma String “sucesso” e a página y, se receber a String “falha”. Através da tag (linha 12), definimos a regra de navegação, já através da tag (linha 13), definimos em qual página estamos aplicando essa navegação. Após isso, temos que definir os casos de navegação, ou seja, o que devemos fazer após receber a String. Isto é possível pela tag (linha 14). Logo após, torna-se necessário informar a String que essa página deve esperar, através da tag (linha 15) e, por último, informar qual página deverá abrir, pela tag (linha 16).

No arquivo faces-config.xml, também configuramos os validadores do nosso sistema, através da tag (linha 20). Nela definimos pela tag (linha 21) o id do validador e pela tag (linha 22) a classe que implementa uma interface de validação.

 

1.      < ?xml version='1.0' encoding='UTF-8'?>

2.      < faces-config version="1.2" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd">

3.      < application>

4.           < view-handler>com.sun.facelets.FaceletViewHandler

5.     

6.      < managed-bean>

7.           < managed-bean-name>usuarioMB

8.      < managed-bean-class>managedbeans.UsuarioMB

9.        < managed-bean-scope>Request

10. 

11. 

12.  < navigation-rule>

13.     < from-view-id>/principal.xhtml

14.     < navigation-case>

15.        < from-outcome>ok

16.        < to-view-id>/detalhes.xhtml

17.     

18. 

19. 

20.  < validator>

21.     < validator-id>uploadValidator

22.     < validator-class>validators.UploadValidator

23. 

24. 

Listagem 2. Arquivo faces-config.xml

 

Componentes JSF

Como foi citado antes, o JSF utiliza componentes GUI (Graphical User Interface) semelhantes aos do pacote Swing/AWT. Esses componentes possuem algumas propriedades que facilitam o envio ou recebimento de dados da sua página. A seguir apresentaremos os componentes JSF mais utilizados nas aplicações:

·         Botão < h:commandButton>: esse componente é usado para submeter dados de um formulário;

·         Formulário < h:form>: é necessário em qualquer página que necessite submeter dados;

·         Campo de texto < h:inputText>: responsável por receber entradas de texto na página;

·         Saída de texto < h:outputText>:  responsável por qualquer saída de texto impressa na view;

·         Tabela < h:dataTable>: responsável pela organização de dados na view. Ela deve vir acompanhada sempre de uma ou mais colunas;

· ...

Quer ler esse conteúdo completo? Tenha acesso completo