Mam formularz z dwoma atrybutami Modelu, jeden z nich to obywatele, a drugi to kara. Te dwa obiekty są oddzielone kartami jquery. Mam problemy z wyświetlaniem elementów w formularzu, aby wyświetlać poprawnie niektóre są wyświetlane, a inne nie. Mam na myśli elementy html.Spring MVC Multiple ModelAttribute Na tym samym formularzu
Nie jestem pewien, jak wyglądałby kontroler, gdy na stronie znajduje się wiele ModleAttributes. Pod jest próbka kodu:
Page
<title>Citizen Registration</title>
</head>
<body>
<div id="tabs">
<ul>
<li><a href="#tab1">Citizen Registration</a></li>
<li><a href="#tab2">Punishment</a></li>
</ul>
<div id="tab1">
<form:form id="citizenRegistration" name ="citizenRegistration" method="post" modelAttribute="citizens" action="citizen_registration.htm">
<div id="divRight" class="mainDiv">
<div class="divGroup" id="divCharInfo">
<fieldset>
<legend>Characteristics Info</legend>
<ol>
<li><form:label for="photo" path="photo">Select Photo</form:label>
<form:input path="photo" type="file" id="photo" title="Upload a photo"/><form:errors path="photo" id="errors"/></li>
<li>
<label>Select Gender</label>
<form:select path="genderId" id="genderId" title="Select Your Gender">
<form:options items = "${gender.genderList}" itemValue="genderId" itemLabel="genderDesc" />
</form:select>
<form:errors path="genderId" class="errors"/>
</li>
<li><form:label for="weight" path="weight">Enter Weight <i>(lbs)</i></form:label>
<form:input path="weight" id="weight" title="Enter Weight"/><form:errors path="weight" id="errors"/>
</li>
<li><form:label for="height" path="height">Enter Height <i>(feet)</i></form:label>
<form:input path="height" id="height" title="Enter Height"/><form:errors path="height" id="errors"/>
</li>
.......................
<div id="tab2">
<form:form id="punishmentRegistration" name ="punishmentRegistration" method="post" modelAttribute="punishment" action="punishment_registration.htm">
<ol>
<li>
<form:label for ="punishmentId" path="punishmentId">Punishment Number</form:label>
<form:input path="punishmentId" id="punishmentId"/><form:errors path="punishmentId" id="errors"/>
</li>
<li>
<form:label for="crimeRecNo" path="crimeRecNo">Select Crime</form:label>
<form:select path="crimeRecNo" id="CrimeRecNo" title="Select Crime">
<form:options items = "${crime.crimeList}" itemValue="crimeRecNo" itemLabel="crimeRecNo" title="crimeDesc"/>
</form:select>
<form:errors path="crimeRecNo" id="errors"/>
</li>
<li>
<form:label for ="monitoringStDate" path="monitoringStDate"> Start Date </form:label>
<form:input path="monitoringStDate" id="monitoringStDate"/><form:errors path="monitoringStDate" id="errors"/>
</li>
<li>
<form:label for ="monitoringEnDate" path="monitoringEnDate"> End Date </form:label>
<form:input path="monitoringEnDate" id="monitoringEnDate"/><form:errors path="monitoringEnDate" id="errors"/>
</li>
</ol>
</form:form>
</div>
</div>
</body>
</html>
Controller
@RequestMapping(value="citizen_registration.htm", method = RequestMethod.GET)
public ModelAndView loadPage(HttpServletRequest request,
HttpServletResponse response,
@ModelAttribute Citizens citizens, @ModelAttribute Punishment punishment,
BindingResult result,
ModelMap m, Model model) throws Exception {
//code here
return new ModelAndView("citizen_registration");
To jest mój kod jednak gdy uruchamiam go nic w Karta2 jest wyświetlany oraznie wszystkich elementów wyświetla się tab1.
co będzie, jeśli utworzysz jedną klasę, która odwołuje się do tych dwóch klas? – devdar
Dobrze, jeśli chcesz iść wzdłuż standardowych form sprężynowych. Następnie, aby powiązać wiele modeli, możesz utworzyć klasę formularzy zawierającą modele. Zauważyłem jednak, że sprężysta forma wiązania jest łatwiejsza, ponieważ eliminują wymóg wdrożenia dodatkowej klasy. Ponadto walidację dla każdego modelu można wykonać osobno. Zapewnia również funkcję do wiązania modeli zagnieżdżonych. –
Rozumiem, co mówisz, co poleciłbyś po prostu użyć oddzielnych formularzy? – devdar