2012-02-29 93 views
10

我對Spring MVC有很長的(並且很高興)的經驗,但最近我對Wicket感興趣。Spring MVC或Wicket?

我的問題也是關於如何處理(使用Wicket)DI,事務管理,JDBC連接和所有這些東西?將Springsource套件的某些部分與Wicket混合可以嗎? Wicket & Weld? Wicket & Guice?

+0

我應該添加測試你的東西的能力(我發現SpringJUnit4ClassRunner對於測試彈簧控制器非常有用) – user1241320 2012-02-29 22:13:14

+0

Wicket對測試也有一些基本的支持。通過單元測試很容易測試UI頁面(或其部分)。只要您不想測試Ajax功能 – bert 2012-03-01 07:36:27

+0

WicketTester也會覆蓋Ajax行爲。純JavaScript測試不是Wicket業務的一部分。 – 2012-03-01 08:27:21

回答

12

Wicket有效地替代Spring MVC,但不是Spring容器本身。 Wicket可以通過@SpringBean註釋輕鬆地與Spring進行集成,這允許您直接向頁面注入Spring bean(服務,DAO等)。您不能以其他方式執行DI - 這是有原因的。

這是一個明智的選擇,一起使用Spring和Wicket。然而,據我記得,Wicket頁面和組件不是由Spring容器管理的,所以你不能使用@Transactional註解(無論如何,這是一個壞主意 - 交易屬於更深層次)。

其他一切工作方式完全相同 - AOP,JDBC等

+1

實際上,如果使用AspectJ +'@ Configurable',則可以在Wicket組件的方法上使用'@ Transactional'。但我不確定是否會推薦使用它。 – tetsuo 2013-03-10 02:32:42

17

檢票是一個表現層框架。它不會處理DI,交易或連接。

但它可以與多個框架,包括Spring,吉斯(官方檢票模塊,wicket-springwicket-guice)和CDI /焊縫(wicket-cdi,從Igor Vaynberg側項目時,檢票提交者之一)被容易地集成。

Wicket Wiki: Integration guides

下面,和春天有個簡單的Wicket應用程序。事務位是普通的舊Spring配置,所以我沒有打擾包括它們。

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

我建議完全離開Spring和嘗試的Java EE 6 + Wicket 6.x.在Java EE 5的日子裏,我使用Spring MVC,然後是Spring + Wicket,但是Java EE 6作爲中間件層只是勝過Spring解決方案。

更新2017年: 在Java 7新的東西和8(lambda表達式,方法refereces,默認的接口方法的實現,...),在Java EE 7 + Wicket 8組合更是吸引人。儘管Spring MVC非常流行,並且可能有更好的學習曲線,但是一旦你嘗試Wicket,當你遇到「下一個很酷的事情」(Angular2)時,你會錯過它。

注:我由紅帽支付,但以上是我誠實的意見。 2011年,我會告訴你和Spring一起去。