2012-02-29 10 views
10

私はSpring MVCで長い経験がありますが、最近はWicketに興味を持っています。Spring MVCまたはWicket?

私の質問は、(Wicketで)DI、Transaction Mgmt、JDBC接続などのすべてのものを処理する方法もありますか? Springsourceスイートの特定の部分をWicketと混在させることはできますか? Wicket & Weld? Wicket & Guice?

+0

私はあなたのものをテストする機能を追加するべきです(私はSpringJUnit4ClassRunnerがスプリングコントローラをテストするのに非常に便利だとわかります)。 – user1241320

+0

Wicketにはテストのための基本的なサポートがあります。単体テストでUIページ(またはその一部)をテストするのは簡単です。あなたがAjax関数をテストしたくない限り、 – bert

+0

Ajaxの動作はWicketTesterの対象となります。プレーンJavaScriptのテストはWicketのビジネスの一部ではありません。 –

答えて

12

WicketはSpring MVCを効果的に置き換えますが、Springコンテナ自体は効果的に置き換えません。 Wicketは、Spring Bean(サービス、DAOなど)を直接ページに挿入できるように、@SpringBean注釈によってSpringと簡単に統合されます。 DIを他の方法で実行することはできません - 正当な理由があります。

SpringとWicketを併用することは賢明です。しかし、私が覚えている限り、WicketのページとコンポーネントはSpringコンテナによって管理されていないので、@Transactionalアノテーションを使用することはできません(とにかく、トランザクションは深いレベルに属します)。他

すべてがまったく同じ作品 - などAOP、JDBC、

+1

実際には、AspectJ + '@ Configurable'を使用する場合、Wicketコンポーネントのメソッドで' @ Transactional'を使用することができます。しかし、私はそれを使用することをお勧めしたいかどうかは分かりません。 – tetsuo

17

Wicketのは、プレゼンテーション層のフレームワークです。 DI、トランザクション、または接続を処理しません。

しかし、それは容易春、Guiceの(公式自動改札モジュール、wicket-spring及びwicket-guice)及びCDI /溶接(wicket-cdiIgor Vaynbergからサイドプロジェクト、自動改札のコミッターの1つ)を含むフレームワークの数、と統合することができます。以下は

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

私は完全に春を残すとJava EE 6を試みることをお勧めします+ Wicket 6.x.私はSpring MVCを使用していましたが、Java EE 5の時代にはSpring + Wicketでしたが、Java EE 6はミドルウェア層としてSpringソリューションに勝っています。

アップデート2017: Javaの7の新グッズで と8(ラムダ、メソッドのrefereces、デフォルトのインターフェイスメソッドの実装、...)、JavaのEE 7 + Wicket 8コンボは、より魅力的です。 Spring MVCはかなり普及しており、学習曲線が改善されているかもしれませんが、Wicketを試してみると、「次のクールなもの」(私の場合はAngular2)になると見逃してしまいます。

注:私はRed Hatから支払われますが、上記は私の正直な意見です。 2011年、私はあなたに春と一緒に行くように言います。

0

ちょうどwicketsを忘れてしまった。シンプルな春のMVC、Twitterのブートストラップレイアウト、バネのポートフォリオ全体で、最高レベルのセキュリティを備えたスケーラブルで最高の高性能アプリケーションを作成できます。 Wicketsはあなたの最初の印象に遅れて実際の開発を始めるとすぐに痛みです。

http://www.slideshare.net/mraible/comparing-jvm-web-frameworks-february-2014私はこのプレゼンテーションが本当に役に立ちました。

関連する問題