Spring MVC + JSP + kilka formularzy na jednej stronie

0

Witam,
Mam problem ponieważ chciałem zrobi stronę jsp z kilkoma zakładkami. Na każdej zakładce miał by inny formularz ... i tu pojawił się problem.
Jako że strona będzie jedna a zakładki chciałem aby działały na zasadzie ukrywana DIV - pojawił się problem ze zdefiniowaniem kontrolera dla danej strony.

Strona userTab.jsp wygląda mniej więcej tak:

	<div id="container">
		<ul id="bookmarks">
			<li class="active"><a href="userTab.htm#1" class="bar1">UserPrv</a></li>
			<li class="active"><a href="userTab.htm#2" class="bar2">UserFirm</a></li>
		</ul>
		<div id="content">
			<div id="bar1">
				<form:form method="POST" action="userTab.htm"
					commandName="userDTO">
					<table>
						<tr>
							<td><b><spring:message code="userList.label.userName" />
							</b>
							</td>
							<td><form:input path="userName" /> <form:errors
									path="userName" cssClass="error" /></td>
						</tr>
                                                                     ...
						<tr>
							<td colspan="2"><input type="submit">
							</td>
						</tr>
					</table>
				</form:form>
			</div>
			<div id="bar2">
				<form:form method="POST" action="userTab.htm"
					commandName="userFirm">
					<table>
						<tr>
							<td><b><spring:message code="userList.label.userName" />
							</b></td>
							<td><form:input path="userName" /> <form:errors
									path="userName" cssClass="error" /></td>
						</tr>
						...
						<tr>
							<td colspan="2"><input type="submit">
							</td>
						</tr>
					</table>
				</form:form>
			</div>
		</div>
	</div>

Chciałem zdefiniowac Controller:

 
	@RequestMapping(method = RequestMethod.GET, value = "/userTab.htm")
	public String initUserPrvBaseDataForm(final ModelMap model) {
		// model.put("users", userService.findAllUsersFirm());
		UserDTO user = new UserDTO();
		model.addAttribute(user);
		return "userTab";
	}
	
	@RequestMapping(method = RequestMethod.POST, value = "/userTab.htm")
	public String saveUserPrvBaseData(@ModelAttribute("userPrvDTO") UserPrvDTO userPrvDTO,
			BindingResult result) {
                       ...
		userService.saveUser(user);
                      ...

		return "redirect:userTabPanel.htm";
	}
	
	
	
	@RequestMapping(method = RequestMethod.GET, value = "/userTab.htm")
	public String initUserFirmBaseDataForm(final ModelMap model) {
		UserFirm user = new UserFirm();
		model.addAttribute(user);
		return "userTab";
	}
	
	@RequestMapping(method = RequestMethod.POST, value = "/userTab.htm")
	public String saveUserFirmBaseData(@ModelAttribute("userFirm") UserFirm user,
			BindingResult result) {
                                  
                      ...
            	userService.saveUser(user);
                       ...
		return "redirect:userTabPanel.htm";
	}

Przy próbie wyświetlenia strony jsp dostaję komunikat:
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.IllegalStateException: Ambiguous handler methods mapped for HTTP path '/userTab.htm': {public java.lang.String eu.ze....controller.user.UserTabPanelController.initUserPrvBaseDataForm(org.springframework.ui.ModelMap), public java.lang.String eu.ze....controller.user.UserTabPanelController.initUserFirmBaseDataForm(org.springframework.ui.ModelMap)}. If you intend to handle the same path in multiple methods, then factor them out into a dedicated handler class with that path mapped at the type level!

Czy może mi ktoś podpowiedzie jak rozwiąza ten problem - lub może ma ktoś lepszy pomysł jak zrealizowa coś podobnego??
Zaznaczam że googlełem jednak niewiele mi to dało.
Będę bardzo wdzięczny.

0

Myślałęm nad include innej strony jsp i zrobienie kontrolera ale uświadomiłem sobie że to nie ma prawa zadziałać.

Jakieś inne pomysły?

0

Ok widzę że nie uzyskam tutaj pomocy.

Pozdrawiam

0

Cześć. Dopiero zaczynam z adnotacjami springa, ale na logike, to masz w kodzie dwa mapowania dla userTab.html na POST i dwa na GET.
Dlatego dostajesz taki komunikat, bo spring nie wie, którą metodę ma wykonać w którym momencie.
Spróuj w jsp zmienić action dla jednego taba na np. userTab1, a drugi userTab2 a w kontrolerze analogiczne adnotacje...

Może tak się da.

0

Niestety ale tak się nie da.
W action muszę poda nazwę strony na której jest form (a ja mam 2 form na jednej stronie). Jeżeli podam coś innego to mam błąd: "The requested resource () is not available."

Poradzilem sobie z tym problemem dzieki podpowiedzi kolegi.
Nie pomyslalem ze get w Controller musi zawierac inicjalizacje wszystkich obiektow na danej stronie a nie tylko aktualnie wyswietlanego.
Dodatkowo przy post musowo obslugiwac w post ustawianie wszystkich obiektow bo inaczej jezeli walidator wykrywa blad i powracamy do naszej strony to sie wysypie - głupi wszystkie poza aktualnym obiektem przekazanym do post.

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