2009-08-03 13 views

Respuesta

0

GWT no es una pila completa de aplicaciones como Rails, por lo que es posible que no encuentres una solución tan integrada como viene de fábrica. GWT es principalmente una capa de vista, aún necesitaría una capa de persistencia.

+0

Entiendo eso, pero estaría bien que lo tenga empaquetado con otro marco para la capa de persistencia. – Otavio

3

Spring Roo se anunció en Google I/O 2010. Eso podría ser lo que estás buscando.

+0

+1, Spring Roo es probablemente lo que estás buscando. Incluso se menciona en [sitio de GWT] (http://code.google.com/webtoolkit/doc/latest/ReleaseNotes.html#MvpFramework). Sin embargo, requiere que GWT 2.1 funcione. – Piotr

+0

[Aquí] (http://www.youtube.com/watch?v=GQHlhIIxCIc) puede encontrar la presentación de Google I/O de la integración de Spring Roo y GWT. – Piotr

0

GWT utiliza un paradigma diferente en comparación con todos los marcos CRUD de libros de texto que resuelven muy poco IMO. Piense en ello como un buen viejo Swing. La comunicación ya está incorporada (GWT-RPC). La única forma de mejorarlo, ninguno de los marcos de CRUD ofrece, sería crear algunos patrones (su conjunto de widgets más rico, etc.) que funcione en algunos datos unificados. Y, por supuesto, el código coincidente en el servidor. De esta forma puede usar métodos GWT-RPC genéricos y estructuras de datos genéricos para pasar datos, no millones de métodos en todas esas interfaces. De lo contrario, GWT-RPC es tan bueno como cualquier "marco" CRUD genérico que tenga esos millones de métodos en la "fachada del servicio".

Una cosa que puede hacer es "integrar" GWT-RPC con Spring MVC. Solo unas pocas líneas de código, y usted puede implementar sus servicios GWT-RPC como Spring @Controllers estándar. Tendrán acceso a todos los componentes autoconectados, etc. ¿Qué más necesitas? Puedes acceder absolutamente a cualquier cosa a través de Spring.

Así que aquí es cómo se hace:

public abstract class GwtRpcController extends RemoteServiceServlet implements Controller, ServletConfigAware { 
private static Log log = LogFactory.getLog(GwtRpcController.class); 

private ServletConfig servletConfig; 

@Override 
public ServletConfig getServletConfig() { 
    return servletConfig; 
} 

@Override 
public void setServletConfig(ServletConfig servletConfig) { 
    try { 
     this.init(servletConfig); 
    } catch (ServletException e) { 
     throw new RuntimeException(e); 
    } 
    this.servletConfig = servletConfig; 
} 

@Override 
protected void onAfterRequestDeserialized(RPCRequest rpcRequest) { 
    super.onAfterRequestDeserialized(rpcRequest);  
} 

@Override 
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception { 
    super.doPost(request, response); 
    return null; 
} 

@Override 
protected void doUnexpectedFailure(Throwable e) { 
    log.error(e.getMessage(), e); 
} 

}

Y su servicio GWT-RPC:

@RemoteServiceRelativePath("gwtrpc/xxx") 
public interface XxxService extends RemoteService { 
... 
} 

@Controller 
@RequestMapping(value = "xxx") 
public class XxxServiceImpl extends GwtRpcController implements XxxService { 
... 
} 

Asegúrese de que "gwtrpc/*" se asigna a SpringDispatcher servlet en web.xml. En general, debe asignar todo ("/") a él y hacer excepciones para los recursos que no son Spring, como CSS, etc., por lo que no necesita hacer nada explícitamente.