Multiple object binding from one HTML form

0

Czy dzięki spring @ModelAttribute mogę obsłużyć sytuację w której po zatwierdzeniu jednego formularza stworzę w kontrolerze kilka obiektów różnych POJO ?Jeśli tak to w jaki sposób to zrobić ?
Mój cel to zrobienie strony do edycji danych użytkownika. Dane te są przechowywane w kilku encjach powiązanych relacjami. Chce wyświetlić jedna stronę do zapisywania i edytowania danych.

Proszę o wskazówki.

1

miec jeden form object a w nim inne obiekty (slowo klucz: nested) ? jakiś powód dlaczego nie możesz tak zrobić ?

0

<form:form commandName="company">

Fields Edit
<label for="companyName" class="col-sm-12 control-label">Company name:</label>


<form:input path="companyName" cssClass="form-control" />
<form:errors path="companyName" />

<label for="nip" class="col-sm-12 control-label">Nip:</label>


<form:input path="nip" cssClass="form-control" />
<form:errors path="nip" />

<label for="phone" class="col-sm-12 control-label">Phone:</label>


<form:input path="phone" cssClass="form-control" />
<form:errors path="phone" />

<label for="email" class="col-sm-12 control-label">Email:</label>


<form:input path="email" cssClass="form-control" />
<form:errors path="email" />

					</tbody>
				</table>
				
				<div class="form-group">
					<div class="col-sm-2">
						<input type="submit" value="Save" class="btn btn-lg btn-primary">
					</div>
				</div>
			</form:form>
		</div>
	</div>
</div>
<div class="col-md-6">
	<!-- Right address -->
	<div class="panel panel-default">
		<div class="panel-heading">
			<h3 class="panel-title">
				<strong>Address</strong>
			</h3>
		</div>
		<div class="panel-body">

			<form:form commandName="address">
				<table class="table table-bordered ">
					<thead>
						<tr>
							<th>Fields</th>
							<th>Edit</th>
						</tr>
					</thead>
					<tbody>

						<tr>
							<td><label for="street" class="col-sm-12 control-label">Street:</label></td>
							<td><div class="form-group">
									<div class="col-sm-12">
										<form:input path="street" cssClass="form-control" />
										<form:errors path="street" />
									</div>
								</div></td>
						</tr>
						<tr>
							<td><label for="streetNumber"
								class="col-sm-12 control-label">Street number:</label></td>
							<td><div class="form-group">
									<div class="col-sm-12">
										<form:input path="streetNumber" cssClass="form-control" />
										<form:errors path="streetNumber" />
									</div>
								</div></td>
						</tr>
						<tr>
							<td><label for="zipcode" class="col-sm-12 control-label">Zipcode:</label></td>
							<td><div class="form-group">
									<div class="col-sm-12">
										<form:input path="zipcode" cssClass="form-control" />
										<form:errors path="zipcode" />
									</div>
								</div></td>
						</tr>
						<tr>
							<td><label for="city" class="col-sm-12 control-label">City:</label></td>
							<td><div class="form-group">
									<div class="col-sm-12">
										<form:input path="city" cssClass="form-control" />
										<form:errors path="city" />
									</div>
								</div></td>
						</tr>
					</tbody>

				</table>

				

			</form:form>

Do tego w kontrolerze mam:

@ModelAttribute("company")
public Company constructCompany(Principal principal) {
return new Company();
}

@ModelAttribute("address")
public Address constructAddress() {
	return new Address();
}

W jaki sposób to zagnieździć ?

0

Dzięki, zrobiłem tak jak sugerowałeś ale niestety nie sprawdza się. Obiekt dla company jest przyjmowany z formularza poprawnie. Jako jeden z argumentów obiektu company jest lista adresów (jeden do wielu).

Jak w tym przypadku przyjąć dane z formularza dla klasy która jest w relacji jeden do wielu?

Zrobiłem to w ten sposób ale nie działa:

				<form action="/easy-reporting/user-settings/edit-company.html" method="post">
					<table class="table table-bordered ">
						<thead>
							<tr>
								<th>Fields</th>
								<th>Edit</th>
							</tr>
						</thead>
						<tbody>
							<tr>
								<td><label for="companyName"
									class="col-sm-12 control-label">Company name:</label></td>
								<td><div class="form-group">
										<div class="col-sm-12" >
											<input type="text" name="companyName"  />
			
										</div>
									</div></td>
							</tr>
							<tr>
								<td><label for="nip" class="col-sm-12 control-label">Nip:</label></td>
								<td><div class="form-group">
										<div class="col-sm-12">
											<input type="text" name="nip" />
											
										</div>
									</div></td>
							</tr>
							<tr>
								<td><label for="phone" class="col-sm-12 control-label">Phone:</label></td>
								<td><div class="form-group">
										<div class="col-sm-12">
											<input type="text" name="phone" />
											
										</div>
									</div></td>
							</tr>
							<tr>
								<td><label for="email" class="col-sm-12 control-label">Email:</label></td>
								<td><div class="form-group">
										<div class="col-sm-12">
											<input type="text" name="email"  />
										
										</div>
									</div></td>
							</tr>
							
							<tr>
								<td><label for="address.street" class="col-sm-12 control-label">Street:</label></td>
								<td><div class="form-group">
										<div class="col-sm-12">
											<input type="text" name="address.street" />
											
										</div>
									</div></td>
							</tr>
							
							<tr>
								<td><label for="address.streetNumber" class="col-sm-12 control-label">Street Number:</label></td>
								<td><div class="form-group">
										<div class="col-sm-12">
											<input type="text" name="address.streetNumber"  />
										
										</div>
									</div></td>
							</tr>

						</tbody>
					</table>
					
					<div class="form-group">
						<div class="col-sm-2">
							<input type="submit" value="Save" class="btn btn-lg btn-primary">
						</div>
					</div>
				</form>
 
0

@niezdecydowany dzięki już działa.

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