2010-12-28 2 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> 

내 질문은 간단하다.

  1. 내 onSubmit 방법은 봄 서비스를 호출 무엇을 할 수 있습니다 내가해야하는?
  2. 내 이 내 Application-context.xml에서 수정되어야하므로 양식이 제출되면 스프링 서비스 클래스 에 연락해야합니다.

답변

2

@SpringBean answer by mhaller이 유효 물론이고 많은 것에 의해 가장 좋은 방법으로 간주 :

기본적 구성 요소 인젝터의 구성 후, 다음과 같은 코드로 끝낸다. 그러나 Wicket Application에 필요한 표준 서비스가있는 표준 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 통합은 스프링 빈 (예 : IContactService 빈)을 위젯 페이지에 삽입하는 방법에 대해 다양한 방법을 보여줍니다.

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 빈을 Spring 애플리케이션 컨텍스트에 추가해야 할 것이다. 누군가 Wicket에 IContact 서비스 구현을 작성하고 제공해야합니다. – mhaller

+0

조금 명확히하기 위해. 어노테이션없이 @SpringBean을 사용하면 타입에 따라 자동 전선을 매개 변수화 할 수 있으므로 응용 프로그램 컨텍스트 구성에 IContact를 구현하는 빈이 있으면 주입됩니다. 여러 대안이있는 경우 주석에 bean 이름을 지정할 수도 있습니다. – DaGGeRRz