Este e um dia muito especial para mim pois ha um ano atras o primeiro post, intitulado Ruby on Rails vs Java, do blog, que antigamente chamava-se railsopen.blogspot.com, foi ao ar. Desde entao, muita coisa mudou: alterei o layout, o dominio (veja esse post)... mas o que permanece e o foco: Ruby e Rails.Sim, aprendi muito, errei alguns vezes, conhece pessoas e cresci. Bom, mas para comemorar essa data especial separei os 10 artigos mais lidos deste primeiro ano do Casa Open:Explore o mundo em 360 grausArquivos em RubyDocumentacao Ruby on RailsGraficos no Rails - CSS GraphsE-mail para varios destinatariosTraduzindo datas no RailsOperador ternario e RubyTipagem em RubySockets em RubyRuby on Rails vs JavaTambem nao poderia deixar de agradecer aos leitores, aos que fazem comentarios, aos assinantes do feed, os seguidores do twitter e a todos que de alguma forma fazem o blog evoluir. Obrigado! Texto direcionado a usuarios do JSF 1.2 tratando do uso do Jboss Seam 2.x.Para quem nao conhece, o Seam e um framework destinado ao desenvolvimento WEB criado pelo mesmo criador do Hibernate, Gavin King, e que tem como um de seus principais objetivos facilitar a integracao entre JSF e EJB3.Muitos sao os ganhos obtidos pelo uso do Seam, dentre estes irei me ater aos seguintes:Menos XMLsRequisicoes por GETFacilidade na utilizacao de ComboBoxInjecao de Dependencias via anotacoesFacilidade no envio de e-mailsAgendamento de tarefasURL user friendlySuporte a transacoesIntegracao com Groovy, Hibernate, Spring, entre outrosPara nao estender muito, neste post irei falar dos tres primeiros. Falarei dos demais em posts futuros.1. Menos XMLsO Seam diminui a utilizacao de XML em varios aspectos, como por exemplo:1.1. NavegacaoUsando apenas o JSF 1.2, a navegacao entre paginas deve ser definida via XML, no arquivo faces-config.xml, e usada por meio de um metodo no Managed Bean que retorne um String de saida configurada no faces-config.xml. Conforme o exemplo abaixo:faces-config.xml:<navegation-rule> <from-view-id>/person/people.xhtml</from-view-id> <navegation-case> <from-outcome>edit</from-outcome> <to-view-id>/person/edit.xhtml</to-view-id> </navegation-case> </navegation-rule>Managed Bean:public String editPeople() { return "edit";}Com o Seam, isso pode ser feito de forma mais simples, apenas retornando o nome da pagina no metodo do Managed Bean.public String editPeople() { return "/person/edit.xhtml";}1.2 Registro de Managed BeansPara que cada Managed Bean seja utilizado nas views do JSF e necessario que este esteja registrado no faces-config.xml, como mostrado abaixo:<?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="htt p://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd"> <managed-bean> <managed-bean-name>people</managed-bean-name> <managed-bean-class>br.com.People</managed-bean-class> <managed-bean-scope>request</managed-bean-scope> </managed-bean></faces-config>Com o Seam, basta que o bean seja declarado como um componente do Seam, por meio da anotacao @Name. Deste modo, o bean passar a ser gerenciado pelo Seam. Ou seja, alem de ser um Managed Bean, tambem e um Seam Component.@Name("people")public class People { //...} 2. Requisicoes por GET O JSF 1.2 nao lida bem com parametros GET. Nao que seja impossivel "capturar" tais parametros, mas e trabalhoso e nao natural. Veja o seguinte exemplo que apresenta uma forma recuperar o parametro "id" passado por GET no bean:String id = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("id")); O Seam facilita muito esse trabalho fazendo "bind" dos parametros GET por meio da anotacao @RequestParameter:@RequestParameterprivate Long id = null;3. Facilidade na utilizacao de ComboBox Imagine a seguinte situacao: voce pretende apresentar ao usuario um ComboBox