Spring MVC, inicjalizacja formularza

0

Mam problem. Otóż tworząc sobie mini-forum internetowe w Springu utknąłem w jednym miejscu i nie wiem jak to rozwiązać. Chodzi o to, że jest sobie prosta forma - pole tekstowe oraz lista rozwijana. Podczas inicjalizacji formularza, lista rozwijana jest wypełniana elementami z bazy danych - do tego używam klasy implementującej interfejs Controller.

No ale druga rzecz, trzeba przecież tę formę zaprogramować tak, aby wysyłała dane w odpowiednie miejsce. Do tego używam klasy dziedziczącej SimpleFormController.

Problem polega na tym, że nie wiem jak połączyć te 2 kontrolery, aby ze sobą nie kolidowały.
Bo gdy robię tak:

(addtopic.jsp to strona z formularzem, addTopicFormController - kontroler, który przechwytuje dane wysyłane z formularza, addTopicUsersListController - kontroller który ma za zadanie pobrać kilka rzeczy z bazy danych i dodac do listy rozwijanej przy starcie formularza)

<property name="urlMap">
  <map>
     ...
     <entry key="/addtopic.html"><ref bean="addTopicFormController"/></entry>
     <entry key="/addtopic.html"><ref bean="addTopicUsersListController"/></entry>
   </map>
</property>

Jeśli zastosuję tylko jeden z nich, to jest OK. Jeśli oba to są błędy... Co mam zrobić? Czytałem troche dokumentacji springa ale i tak nie wiem ocb

0

Dobra już sobie poradziłem. Zacząłem używać adnotacji zamiast XMLa i udało mi się w jednym kontrolerze zawrzeć kontroler wyświetlania(GET) oraz wysyłania (POST).
Oto kod, może się komus przyda:

package pl.robciq.forum.controllers;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.SessionAttributes;
import org.springframework.web.bind.support.SessionStatus;
import org.springframework.web.servlet.ModelAndView;
import pl.robciq.forum.NormalTopic;
import pl.robciq.forum.Topic;
import pl.robciq.forum.DAO.ForumDAO;

/**
 * Kontroler, zajmujący się dodawaniem nowego tematu do forum.
 */
@Controller
@RequestMapping("/addtopic")
@SessionAttributes("topic") // przechowuje obiekty, które mogą zostać zmodyfikowane w czasie sesji, np. przez formularz
public class AddTopicFormController
{
	/**
	 * Data Access Object dla forum
	 */
	private ForumDAO forumDAO = null;
	
	/**
	 * Załaduj Data Access Object z Beana
	 * @param forumDAO
	 * 		 	obiekt pośredniczący w komunikacją z bazą danych
	 */
	@Autowired
	public AddTopicFormController(ForumDAO forumDAO) 
	{
		this.forumDAO = forumDAO;
	}
	
	/**
	 * Co ma się dziać przy wyświetlaniu strony. Następuje stworzenie obiektu NormalTopic
	 * i dodaniu go jako obiekt sesji.
	 * @param modelMap
	 * 		obiekt mapy modelu, przechowujący obiekt, który zostanie odpowiednio zmodyfikowany
	 * 		 po wypełnieniu formularza i wysłaniu formy
	 * @return
	 * 	model widoku; przechodzi do właściwej formy addtopic.jsp
	 */
	@RequestMapping(method = RequestMethod.GET)
	public ModelAndView pageLoad(ModelMap modelMap)
	{
		Topic topic = new NormalTopic();
		modelMap.addAttribute("topic", topic);
		
		List<?> usersIDs = this.forumDAO.selectAllUserIDs();
		return new ModelAndView("addtopic").addObject("usersIDs", usersIDs);
	}
	
	
  	
	/**
	 * Funkcja, która przejmuje kontrolę nad odebraniem danych wysłanych z formularza.
	 * @param topic
	 * 		Obiekt nowego tematu, który wcześniej został dodany jako obiekt sesji, a teraz
	 * 		jest odbierany w ostatecznej formie. (po dodaniu nazwy tematu i właściciela.
	 * @param result
	 * @param status
	 * @return
	 *    nazwa pliku jsp do przekierowania.
	 */
	@RequestMapping(method = RequestMethod.POST)
	public String onSubmit(@ModelAttribute("topic") Topic topic, BindingResult result, SessionStatus status)
	{
	  Date topicCreatingDate = new Date();
	  topic.setTimeStamp(topicCreatingDate.getTime());
	  SimpleDateFormat sdf = new SimpleDateFormat("dd MMMMMMMMMMMMMMM yyyy, HH:mm:ss");
	  topic.setFormattedDate(sdf.format(topicCreatingDate));
	  
	  forumDAO.addTopic(topic);
	  
	  return "index";
  }
}

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