Калитка и весенняя интеграция - PullRequest
1 голос
/ 29 декабря 2010

У меня есть форма контакта с калиткой, и я получаю объект формы. Теперь мне нужно передать этот объект в 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 вызывает Spring Сервис
  2. Может ли кто-нибудь дать мне знать, что нужно чтобы изменить в моем Application-context.xml, чтобы один раз форма отправляется, она связывается класс Spring Service.

Ответы [ 2 ]

9 голосов
/ 29 декабря 2010

Интеграция Wicket-Spring показывает различные способы внедрения Spring Beans (например, вашего компонента IContactService) в страницы 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);
        }
    };  
2 голосов
/ 29 декабря 2010

Ответ @SpringBean от mhaller , конечно, действителен и многими считается лучшей практикой.Но я предпочитаю более стандартный подход Spring, где в вашем приложении Wicket есть необходимые вам услуги.

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();

Конечно, есть некоторые недостатки,самое главное, что вы не можете легко протестировать такой компонент без приложения.

...