Vaadin e um framework para criar aplicacoes web ricas (RIA) que usa os componentes do GWT e mapeia os eventos para o servidor, ou seja, abstrai o mapeamento dos servicos do GWT.Uma aplicacao em VaadinBasicamente uma aplicacao web com Vaadin e bem simples:import com.vaadin.ui.*;public class HelloWorld extends com.vaadin.Application { public void init() { Window main = new Window("Hello window"); setMainWindow(main); main.addComponent(new Label("Hello World!")); }} Baixe o vaadin-6.2.3.jar, coloque dentro do lib e configure o web.xml:<context-param> <description>Vaadin production mode</description> <param-name>productionMode</param-name> <param-value>false</param-value></context-param><servlet> <servlet-name>Myproject Application</servlet-name> <servlet-class> com.vaadin.terminal.gwt.server.ApplicationServlet </servlet-class> <init-param> <description>Vaadin application class to start</description> <param-name>application</param-name> <param-value> HelloWorld </param-value> </init-param></servlet><servlet-mapping> <servlet-name>Myproject Application</servlet-name> <url-pattern>/*</url-pattern></servlet-mapping> Sua aplicacao funcionando: Integrando com o SpringEstendi a classe AbstractApplicationServlet, que e uma servlet que indica qual a classe Application sera usada.package br.com.dev.naskar.integ.vaadin.spring;import javax.servlet.ServletConfig;import javax.servlet.ServletException;import javax.servlet.http.HttpServletRequest;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import com.vaadin.Application;import com.vaadin.terminal.gwt.server.AbstractApplicationServlet;/** * Inicializa o Spring e configura a application do Vaadin. * * @author rafael */@SuppressWarnings("serial")public class SpringVaadinApplicationServlet extends AbstractApplicationServlet { /** * nome do bean do spring que sera usado como application. */ private String nameSpringBeanApplication; /** * Class do application. */ private Class applicationClass; /** * Contexto do spring. */ private ApplicationContext springContext; @Override protected final Class getApplicationClass() throws ClassNotFoundException { return applicationClass; } @Override public final void init(final ServletConfig config) throws ServletException { super.init(config); nameSpringBeanApplication = config.getInitParameter("nameSpringBeanApplication"); String contextConfigLocation = config.getInitParameter("contextConfigLocation"); if (contextConfigLocation == null || contextConfigLocation.equals("")) { throw new RuntimeException( "Parametro contextConfigLocation nao configurado: " + contextConfigLocation ); } springContext = new ClassPathXmlApplicationContext(contextConfigLocation); Application application = (Application) springContext.getBean(nameSpringBeanApplication); if (application == null) { throw new RuntimeException( "Spring Bean nao encontrado: " + nameSpringBeanApplication ); } applicationClass = application.getClass(); } @Override protected final Application getNewApplication( final HttpServletRequest request ) throws ServletException { return (Application) springContext.getBean(nameSpringBeanApplication); }}A cada HttpSession criada para um usuario, e chamado o metodo getNewApplication, ou seja, precisamos lembrar sempre de configurar o bean com escopo de prototype, para que a cada get do contexto do Spring, seja criado uma nova aplicacao.package br.com.dev.naskar.apres;import org.springframework.context.annotation.Scope;import org.springframework.stereotype.Component;import com.vaadin.Application;import com.vaadin.ui.Label;import com.vaadin.ui.Window;/** * Blank application. */@Component@Scope("prototype")@SuppressWarnings("serial")public class BlankApplication extends Application { /** * Mostra a iniciacao da aplicacao. */ public BlankApplication() { System.out.println("Iniciando application..."); } /** * Cria o layout da janela principal. * * @return Janela principal. */ public final Window crieWindow() { Window mainWindow = new Window("Blank Vaadin Spring"); Label label = new Label("Hello Vaadin Spring!"); mainWindow.addComponent(label); return mainWindow; } @Override public final void init() { this.setMainWindow(crieWindow()); }}Nessa classe podemos usar as injecoes, aspectos, ferramentas de teste e tudo que o Spring tem sem problemas.Veja que temos que trocar a definicao da servlet, indicando qual o nome do bean do spring sera usado e o onde esta o applicationContext.xml do Spring. <context-param> <description>Vaadin production mode</description> <param-name>productionMode</param-name> <param-value>false</param-value></context-param><servlet> <servlet-name>main</servlet-name> <servlet-class>br.com.dev.naskar.integ.vaadin.spring.SpringVaadinApplicationServlet </servlet-class> <init-param> <description>nome do bean do spring</description> <param-name>nameSpringBeanApplication</param-name> <param-value>blankApplication</param-value> </init-param> <init-param> <description>nome do bean do spring</description> <param-name>contextConfigLocation</param-name> <param-value>META-INF/applicationContext*.xml</param-value> </init-param></servlet><servlet-mapping> <servlet-name>main</servlet-name> <url-pattern>/*</url-pattern></servlet-mapping> Pronto, temos a aplicacao funcionando com todo o backend do Spring.ConclusaoEstive procurando um framework para a camada de apresentacao que nao me desse tanto trabalho com detalhes da propria web. Utilizei o JBoss RichFaces, IceFaces (que e o que recomendo se voce precisa mesmo usar JSF), mas vieram os problemas inerentes