2012-02-29 37 views
10

Tengo una experiencia larga (y feliz hasta ahora) con Spring MVC, pero últimamente estoy interesado en Wicket.Spring MVC o Wicket?

Mi pregunta es también sobre cómo manejar (con Wicket) DI, gestión de transacciones, conexiones JDBC y todo eso? ¿Está bien mezclar ciertas partes de la suite Springsource con Wicket? Wicket & Weld? Wicket & Guice?

+0

Debería haber agregado la capacidad de probar tus cosas (me parece que SpringJUnit4ClassRunner es muy útil para probar los controladores de resorte) – user1241320

+0

Wicket también tiene soporte básico para las pruebas. Es fácil probar las páginas UI (o partes de las mismas) a través de pruebas unitarias. Siempre que no desee probar las funciones de Ajax – bert

+0

, WicketTester también cubre los comportamientos de Ajax. Las pruebas de JavaScript no son parte de los negocios de Wicket. –

Respuesta

12

Wicket reemplaza efectivamente a Spring MVC, pero no al contenedor Spring en sí. Wicket se integra fácilmente con Spring a través de la anotación @SpringBean que le permite inyectar Spring beans (servicios, DAO, etc.) directamente en las páginas. No puede realizar DI al revés, por una buena razón.

Es una opción inteligente para usar Spring y Wicket juntos. Sin embargo, por lo que recuerdo, las páginas y los componentes de Wicket no están gestionados por el contenedor Spring, por lo que no puede usar la anotación @Transactional (lo cual es una mala idea, las transacciones pertenecen a niveles más profundos).

Todo lo demás funciona exactamente de la misma - AOP, JDBC, etc.

+1

En realidad, puede usar '@ Transactional' en los métodos de componentes de Wicket, si usa AspectJ +' @ Configurable'. Pero no estoy seguro de si recomendaría usarlo. – tetsuo

17

Wicket es un marco de presentación de la capa. No manejará DI, transacciones o conexiones.

Pero se puede integrar fácilmente con una serie de marcos, incluyendo la primavera, Guice (módulos oficiales Wicket, wicket-spring y wicket-guice) y CDI/Weld (wicket-cdi, un proyecto paralelo de Igor Vaynberg, uno de los committers Wicket).

Wicket Wiki: Integration guides

A continuación, una aplicación sencilla peatonal incorporada con la primavera. Los bits de la transacción son simples configuración de Spring, así que no me molesté en incluirlos.

HelloWorldService.java

public class HelloWorldService { 
    private String message; 
    public void setMessage(String message) { 
     this.message = message; 
    } 
    public String getMessage() { 
     return message; 
    } 
} 

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd"> 

    <bean id="helloWorldService" class="minimal.wicketspring.HelloWorldService"> 
    <property name="message" value="Hello, World!" /> 
    </bean> 
</beans> 

WicketApplication.java

public class WicketApplication extends WebApplication { 
    @Override 
    public void init() { 
     super.init(); 
     getComponentInstantiationListeners().add(new SpringComponentInjector(this)); 
    } 
    @Override 
    public Class<HomePage> getHomePage() { 
     return HomePage.class; 
    } 
} 

HomePage.java

public class HomePage extends WebPage { 
    @SpringBean 
    private HelloWorldService helloWorldService; 

    public HomePage() { 
     add(new FeedbackPanel("feedback")); 
     add(new Link<Void>("link") { 
      @Override 
      public void onClick() { 
       info(helloWorldService.getMessage()); 
      } 
     }); 
    } 
} 

homepage.html

<!DOCTYPE html> 
<html xmlns:wicket="http://wicket.apache.org"> 
<body> 
    <div wicket:id="feedback"></div> 
    <a wicket:id="link">Show Message</a> 
</body> 
</html> 

Web.xml

<?xml version="1.0" encoding="ISO-8859-1"?> 
<web-app 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-app_2_5.xsd" version="2.5"> 

    <listener> 
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
    </listener> 

    <filter> 
    <filter-name>wicket.wicket-spring</filter-name> 
    <filter-class>org.apache.wicket.protocol.http.WicketFilter</filter-class> 
    <init-param> 
     <param-name>applicationClassName</param-name> 
     <param-value>minimal.wicketspring.WicketApplication</param-value> 
    </init-param> 
    </filter> 

    <filter-mapping> 
    <filter-name>wicket.wicket-spring</filter-name> 
    <url-pattern>/*</url-pattern> 
    </filter-mapping> 
</web-app> 
7

Yo recomendaría dejar primavera por completo y probar el Java EE 6 + Wicket 6.x. Estaba usando Spring MVC, luego Spring + Wicket en tiempos de Java EE 5 pero Java EE 6 ya que la capa de middleware simplemente supera las soluciones de Spring.

Actualización 2017: Con los nuevos objetos valiosos en Java 7 y 8 (lambdas, refereces método, las implementaciones de métodos interfaz por defecto, ...), la Java EE 7 + Wicket 8 combo es aún más atractivo. Aunque Spring MVC es bastante popular y podría tener una mejor curva de aprendizaje, una vez que pruebe Wicket lo perderá cuando llegue a la "siguiente cosa interesante" (Angular2 en mi caso).

Nota: Me paga Red Hat, pero lo anterior es mi opinión sincera. En 2011, te diría que te vayas con Spring.

0

Olvídate de las ventanillas. Simple spring MVC, el diseño de arranque de Twitter y la cartera de primavera completa le permiten crear aplicaciones escalables y de alto rendimiento, con la máxima seguridad. Wickets es dolor tan pronto como va detrás de su primera impresión y comienza el desarrollo real.

http://www.slideshare.net/mraible/comparing-jvm-web-frameworks-february-2014 Espero que esto ayude a tomar una decisión para mí esta presentación fue realmente útil.