Kontroler w Springu

0

Witam,

Zacząłem niedawno naukę Springa i oczywiście są problemy :)

Chcę stworzyć widok, który wyświetla dane z bazy i posiada formularz, który przesyła jakieś dane.

Jeśli mój kontroler ma obsłużyć formularz, to musi rozszerzać klasę SimpleFormController, natomiast logikę działania formularza umieszczam w metodzie onSubmit.

Konfiguracja beana w dispatcher-servlet.xml może być taka:
<bean name="/borrow_book.htm" class="library.controller.BorrowController">
<property name="commandClass" value="library.model.Book" />
<property name="formView" value="borrow_book" />
<property name="successView" value="library" />
</bean>

Ale w jaki sposób zmusić kontroler to wyświetlenia danych z bazy przy załadowaniu strony (borrow_book.htm) i przed użyciem formularza...

Gdy mój kontroler zawierał metody:
protected ModelAndView onSubmit(Object command) throws Exception {
}

protected ModelAndView handleRequestInternal(HttpServletRequest arg0, HttpServletResponse arg1) throws Exception {
}

to handleRequestInternal zwracał odpowiedni widok z danymi z bazy po wczytaniu strony, ale za to metoda onSubmit nie działała...

Mam nadzieję, że zrozumiecie o co mi chodzi, pomimo tak chaotycznego opisu...
Dzięki za pomoc!

0

W Spring 3.0, SimpleFormController jest @Deprecated. W zamian za to uzywa sie adnotacji. Dla Twoich potrzeb wystarczy np. tak zdefiniowany kontroler:

package my.sample.spring.project;

@Controller
@RequestMapping("/myform.htm")
public class MyFormController {
	//... injecting services, etc.
	@Inject
	private MyService myService;
	
	@RequestMapping(method=RequestMethod.GET)
	public ModelAndView showForm() {
		MyData data = myService.getDataFromDatabase();
		ModelAndView mav = new ModelAndView("myform", "data", data);
		return mav;
	}
	
	@RequestMapping(method=RequestMethod.POST)
	public String onSubmit(@ModelAttribute("data") MyData data) {
		//... processing data
		return "redirect:/success.htm";
	}
}
package my.sample.spring.project;

@Controller
@RequestMapping("success.htm")
public class MyFormSuccessController {
	public String success() {
		return "success";
	}
}

I konfiguracja Spring'a:

<?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:context="http://www.springframework.org/schema/context"
		xmlns:mvc="http://www.springframework.org/schema/mvc"
		xmlns:p="http://www.springframework.org/schema/p"
		xsi:schemaLocation="
			http://www.springframework.org/schema/beans
			http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
			http://www.springframework.org/schema/context
			http://www.springframework.org/schema/context/spring-context-3.0.xsd
			http://www.springframework.org/schema/mvc
			http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
			">
		
		<context:component-scan base-package="my.sample.spring.project"/>
		
		<mvc:annotation-driven/>
		
		<bean id="viewResolver"
			class="org.springframework.web.servlet.view.InternalResourceViewResolver"
			p:prefix="/WEB-INF/jsp/" p:suffix=".jsp"/>

		<!-- further configuration: services, etc. -->
</beans>

Nazwy metod w kontrolerach moga byc dowolne. Co do przyjmowanych parametrow i zwracanych wartosci, odsylam do specyfikacji Spring'a. Oczywiscie w /WEB-INF/jsp/ musisz wrzucic Swoje szablony widoku: myform.jsp i success.jsp

1 użytkowników online, w tym zalogowanych: 0, gości: 1