Posts tagged ‘Java’

AJAX II: Java Server Faces com Jboss RichFaces

Continuando com a série de posts sobre AJAX, agora vou mostrar como é mais simples desenvolver aplicativos utilizando um framework e o escolhido foi JavaServer Faces.

A utilização de frameworks é uma mão-na-roda, tanto no sentido de diminuir muito a reconstrução de funcionalidades básicas, tão quanto para padronizar componentes. O JavaServer Faces há tempos é uma base de desenvolvimento segura, padronizada e rica em componentes web 2.0, seguindo este padrão o pessoal do JBoss criou o RichFaces, que futuramente foi chamado de Ajax4Jsf, nada mais é que um pacote de componentes pré-definidos para construção de aplicativos utilizando AJAX. No wikipedia você encontra uma descrição mais detalhada sobre JSF e RichFaces.

Em seguida vou demonstrar um desafio feito por mim mesmo, veja aqui, construindo um auto-completar utilizando JSF com Richfaces.

Os conceitos de JSF e RichFaces não serão discutidos, ou seja, apenas vou demonstrar como criar a aplicação sem detalhar a configuração feita no web.xml e no faces-config.xml, futuramente dedicarei um post sobre essas configurações.

Em seguida será demonstrado como construit um auto-completar cujo conteúdo será o nome de países, portanto, a estrutura básica das classes é esta:

O arquivo web.xml está configurado básicamente para trabalhar com os framewroks JSF e RichFaces.

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="2.5">
<display-name>ClubesRich</display-name>
<!-- RichFaces Config -->
<context-param>
<param-name>org.richfaces.SKIN</param-name>
<param-value>blueSky</param-value>
</context-param>
<context-param>
<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
<param-value>server</param-value>
</context-param>
<filter>
<display-name>RichFaces Filter</display-name>
<filter-name>richfaces</filter-name>
<filter-class>org.ajax4jsf.Filter</filter-class>
</filter>
<filter-mapping>
<filter-name>richfaces</filter-name>
<servlet-name>Faces Servlet</servlet-name>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
<dispatcher>INCLUDE</dispatcher>
</filter-mapping>

<!-- Faces Config -->
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>

<!-- Faces Mapping -->
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.jsf</url-pattern>
</servlet-mapping>

<!-- Database Config -->
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/Clubes</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
<!--  -->
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsf</welcome-file>
</welcome-file-list>
</web-app>

Já o ManagerBean está assim configurado no faces-config.xml:

<?xml version="1.0" encoding="UTF-8"?>
<faces-config version="1.2" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xi="http://www.w3.org/2001/XInclude"
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">
<managed-bean>
<managed-bean-name>regiaoControl</managed-bean-name>
<managed-bean-class>com.clubs.control.RegiaoControl</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
</managed-bean>
<navigation-rule>
<display-name>autocomplete</display-name>
<from-view-id>/autocomplete.jsp</from-view-id>

</navigation-rule></faces-config>

Veja abaixo o manager bean terá um método chamado autoCompletePais que receberá um parametro do tipo Object e retorna um ArrayList do tipo Pais.

public ArrayList<pais> autoCompletePais(Object o){
return rdao.getAllPais( o.toString() );
}

E por fim, o arquivo autocomplete.jsp, que foi mapeado no faces-config, mostrará como é simples utilizar o recurso SuggestionBox do pacote RichFaces e fazer um auto-completar com diversos recursos, acima de tudo bonito e eficaz no dia-a-dia, veja:

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

<f:view>
<h:form>
<rich:panel>
<f:facet name="header"><h:outputText value="Digite o Pais:"/></f:facet>
<h:inputText value="#{regiaoControl.pais.nome}" id="campo" />
<rich:suggestionbox height="150"
width="150"
for="campo"
fetchValue="#{campo.nome}"
suggestionAction="#{regiaoControl.autoCompletePais}"
var="campo">
<h:column>
<h:outputText value="#{campo.id_pais}"/>
</h:column>
<h:column>
<h:outputText value="#{campo.nome}"/>
</h:column>
</rich:suggestionbox>
</rich:panel>
</h:form>
</f:view>

Veja o resultado final, tornando a utilização do software mais agradável.

Java, Os iniciantes e a Sopa de Letrinhas

Uma breve histórinha: “recentemente um amigo iniciou seu estágio em uma grande companhia em Soluções de TI, ele fez treinamentos específicos durante algum tempo, porém, para sua surpresa o tal treinamento foi ignorado e disseram agora você irá estagiar em Java (JEE) e PlSql (Oracle), hã? O que é isso? Meu amigo não gostou da idéia inicialmente mas depois de algumas conversas ele mudou de idéia, hoje está feliz tentando entender e programar em Java”.

Eu aprendi um pouco com esta história, aprendi que as empresas muitas vezes não estão preocupadas quão bom será o seu código, ou ainda qual o seu nível de conhecimento sobre a plataforma de desenvolvimento utilizada. Conhecer o ambiente, quais as possibilidades de evolução dele, a aceitação de mercado, e vou mais afundo a portabildiade, segurança e velocidade consideradas por especialistas são de extrema importância para um desenvolvedor, e não apenas “Leia e Faça”.

Calma lá, ou muita calma nessa hora! :)
Não quero ser polêmico e chato neste primeiro post, portanto deixaremos minhas opiniões a parte e vamos ao que interessa.

Muitas pessoas quando iniciam seus estudos no mundo Java ficam espantados com a quantidade de siglas, e realmente é uma sopa de letrinhas quase que inesgotável, mas como estamos aqui para esclarecer e não complicar ainda mais, vamos lá. Abaixo listei algumas siglas junto a um breve resumo.

JVM – Java Virtual Machine
Máquina Virtual Java, responsável por carregar os programas e fazer a conversão do bytecodes em Linguagem de Máquina, definida para cada estrutura de Sistema Operacional. Aqui está um dos grandes diferenciais do Java comparado a outros linguagens, o programa não se limita ao SO já que a JVM faz a conversão.

JRE – Java Runtime Environment
Composto pela JVM e Bibliotecas Java para execução de programas em tempo real.

JSE – Java Standard Edition
Ambiente com a estrutura básica necessária para criação de programas Java, contém a JVM, o compilador e as bibliotecas Java necessárias.

JEE – Java Enterprise Edition
Assim como JSE, o JEE é uma edição do ambiente Java para desenvolvimento de programas, porém, com número de recursos superior, permitindo o desenvolvimento em multicamadas, componentes distribuídos, ambientes de internet, etc.

JME – Java Micro Edition
Edição do Java voltado para dispositivos capacidade de memória compacta, tais como: Celulares, PDAs, e muitos outros dispositivos.

JSDK – Java Standard Development Kit
Contém o JRE, JSE, os fontes das classes Java e o JavaDoc, com isto, fornecendo o ambiente para desenvolvimento e execução de programas Java.

JAVA_HOME
É o nome da variável de sistema operacional que contém o caminho de instalação do JSDK. Uma boa prática que deve ser seguidas por todos bons programadores.

CLASSPATH
É o nome da variável de sistema operacional que contém o caminho das bibliotecas nativas do Java ou de terceiros para a compilação e execução de programas Java.

EJB
Enterprise JavaBeans, componente JEE que fica no container do Servidor de Aplicação, auxilia no desenvolvimento de aplicações distribuídas, transacionais de forma segura e ágil.

Obviamente que foram listados pouquissimos termos aqui talvez você tenha ouvido falar em Design Pattern, JSF, JFX, Tomcat, JBoss, e nem saiba que raios isto significa!Fique tranquilo ao longo do tempo iremos discutir mais sobre eles.