2010-12-28 6 views
1

私はウィッケットの連絡フォームを持っています。私はフォームオブジェクトを受け取ります。今私はこのオブジェクトをSpring Serviceに渡す必要があります。ウィケットとスプリングの統合

package com.mysticcoders.mysticpaste.web.pages; 

import org.apache.wicket.markup.html.WebPage; 
import org.apache.wicket.markup.html.form.Form; 
import org.apache.wicket.markup.html.form.TextField; 
import org.apache.wicket.markup.html.panel.FeedbackPanel; 
import com.mysticcoders.mysticpaste.model.Contact; 
import org.apache.wicket.model.CompoundPropertyModel; 

import com.mysticcoders.mysticpaste.services.IContact; 


public class FormPage extends WebPage 
{ 

    private Contact contact; 
    private IContact icontact; 

    public FormPage() 
    { 
     // Add a FeedbackPanel for displaying our messages 
     FeedbackPanel feedbackPanel = new FeedbackPanel("feedback"); 
     add(feedbackPanel); 

     Form<Object> form = new Form<Object>("contactForm", 
       new CompoundPropertyModel<Object>(contact)) 
     { 
      private static final long serialVersionUID = 1L; 

      protected void onSubmit(Contact contact) 
      {    
       icontact.saveContact(contact); 
      } 
     }; 
     form.add(new TextField<Object>("name")); 
     form.add(new TextField<Object>("email")); 
     form.add(new TextField<Object>("country")); 
     form.add(new TextField<Object>("age")); 

     add(form); 
     // add a simple text field that uses Input's 'text' property. Nothing 
     // can go wrong here 

    } 


} 

私は、アプリケーションコンテキストXMLで何かを行う必要があると確信しています。

My Application-context.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" 
     xmlns:tx="http://www.springframework.org/schema/tx" 
     xsi:schemaLocation=" 
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd 
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">   

    <bean id="WicketApplication" class="com.mysticcoders.mysticpaste.web.pages.WicketApplication" /> 

</beans> 

私の質問は簡単です。私 をonSubmitメソッドは春 サービスを呼び出すことができます

  1. 私は何をすべき?
  2. 誰かが私に たら、フォームが送信されますように、それは、私の アプリケーションのcontext.xmlに変更の連絡先 春のサービスクラスに を必要とするものを知っているようでした。

答えて

2

@SpringBean answer by mhallerが有効なのは勿論であると多くの人にベストプラクティスを検討し:

基本的には、コンポーネントインジェクタの設定後、次のコードで終わります。しかし私はあなたのWicketアプリケーションが必要とするサービスを持っているより標準的なSpringアプローチを好みます。

public class YourWicketApp extends WebApplication{ 
    public static YourWicketApp get(){ 
     return (YourWicketApp) Application.get(); 
    } 
    private ServiceA serviceA; 
    // getter and setter for serviceA here 
} 

は、今すぐあなたのコンポーネントで、いくつかの欠点、あなたは簡単にアプリケーションなしで、このようなコンポーネントをテストすることはできません最大の一つであるが、もちろんあります

YourWicketApp.get().getServiceA(); 

を呼び出します。

+0

このアプローチでは、WebApplicationのこの特定の実装ではすべてのコンポーネントを結びつけませんか?したがって、この コンポーネントを別のアプリケーションで再利用することはできません。 –

+1

@arun yup、それはもちろん、トレードオフの –

+0

少しでも手頃な価格です:P –

9

Wicket-Spring統合では、Spring Beans(例:IContactService Bean)をWicketページに挿入する方法がさまざまです。

public class FormPage extends WebPage 
{ 
    @SpringBean 
    private IContact icontact; 
    ... 
    Form<Object> form = new Form<Object>("contactForm", 
      new CompoundPropertyModel<Object>(contact)) 
    { 
     private static final long serialVersionUID = 1L; 

     protected void onSubmit(Contact contact) 
     {    
      icontact.saveContact(contact); 
     } 
    }; 
+0

WicketからSpringサービスを呼び出すために私のapplication-context.xmlに触れる必要がありますか? – Thalaivar

+0

もちろん、IContactService BeanをSpringアプリケーションコンテキストに追加する必要があります。誰かがWicketにIContactサービスの実装を作成して提供しなければならない – mhaller

+0

少し明確にする。注釈なしで@SpringBeanを使用すると、タイプ別に自動配線が行われるため、アプリケーションコンテキストコンフィグレーションでIContactを実装するBeanがある限り、それが挿入されます。複数の選択肢がある場合は、アノテーションにBean名を指定することもできます。 – DaGGeRRz

関連する問題