I am making an application in which I want to integrate Wicket + Spring. Application is a grocery store on which user comes and buy something. I know there are two ways to do this.
Using the annotation aprroach. Wicket-Spring integration shows various ways on how to inject Spring Beans into Wicket pages.
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); } };
The @SpringBean is of course valid and considered a best practice by many. But there is also another approach, where your Wicket Application has the services you need.
public class YourWicketApp extends WebApplication{ public static YourWicketApp get(){ return (YourWicketApp) Application.get(); } private ServiceA serviceA; // getter and setter for serviceA here }
Now in your component, call
YourWicketApp.get().getServiceA();
I want to know which is the best way to integrate spring with wicket and what are the drawbacks in each case.
However as far as I remember Wicket pages and components aren't managed by Spring container so you cannot use @Transactional annotation on them (which is a bad idea anyway - transactions belong to deeper levels). Is this statement valid?