Több objektumot adok át egy tavaszi vezérlőről a nézetbe. Ott töltök ki adatokat az átadott objektumokhoz Thymeleaf-el. A probléma az, hogy az átadott objektumok hasonló attribútumnevekkel rendelkeznek. Például az invoiceRecipientDTO-nak van egy fname, és a GuestDTO-nak is van egy fname. A probléma most a következő: Az űrlap elküldése után az összes azonos nevű beviteli mező vesszővel összefűződik.
Példa: Számla címzettje --› fnév: Teszt vendég --› fnév: XYZ
az űrlap elküldése után mindkét érték vesszővel lesz összefűzve, így a GuestDTO és az InvoiceRecipientDTO fname attribútuma Test, XYZ lesz. Mit csinálok rosszul, hogy összefűződik, és nem a megfelelő attribútumra van írva?
Már próbáltam hozzárendelni az objektumot egy div-hez, de nem változott semmit
<div th:object="${invoiceRecipientDTO}">
<input type="text" class="form-control" id="fnameRecipient" data-item="fnameRecipient" th:field="*{fname}" required>
</div>
<div th:object="${guestDTO}">
<input type="text" class="form-control" id="fnameGuest" data-item="fnameGuest" th:field="*{fname}" required>
</div>
Próbáltam a th:value-vel és a név hozzárendelésével is dolgozni, de az sem működött
<input type="text" class="form-control" id="fnameRecipient" data-item="fnameRecipient" name="fname" th:value="${invoiceRecipientDTO.fname}" required>
<input type="text" class="form-control" id="fnameGuest" data-item="fnameGuest" name="fname" th:value="${guestDTO.fname}" required>
Mindkét esetben mindkét beviteli mező értéke összefűződik, és az fname-hez lesz rendelve.
Jelenlegi kódom:
Vezérlő:
@GetMapping(CREATEBOOKING_URL)
public String createBooking(Model model) {
InvoiceRecipientDTO invoiceRecipientDTO = InvoiceRecipientDTO.create().setId("").build();
GuestDTO guestDTO = GuestDTO.create().setId("").build();
model.addAttribute("guestDTO", guestDTO);
model.addAttribute("invoiceRecipientDTO", invoiceRecipientDTO);
return CREATEBOOKING_VIEW;
}
@PostMapping(BOOKINGCONFIRMATION_URL)
public ModelAndView summaryPage(InvoiceRecipientDTO invoiceRecipientDTO, GuestDTO guestDTO) {
GuestTypeID guestTypeID = this.guestTypeService.createGuest(guestDTO.fname(), guestDTO.lname(), guestAddressDTO);
InvoiceRecipientID invoiceRecipientID = this.invoiceRecipientService.createInvoiceRecipient(invoiceRecipientDTO.fname(), invoiceRecipientDTO.lname(), invoiceRecipientAddressDTO, invoiceRecipientDTO.phoneNumber(), invoiceRecipientDTO.email());
this.invoiceRecipientService.assignBooking(bookingID.id(), invoiceRecipientID.id());
this.invoiceRecipientService.assignGuestType(guestTypeID.id(), invoiceRecipientID.id());
this.guestTypeService.assignInvoiceRecipient(guestTypeID.id(), invoiceRecipientID.id());
return new ModelAndView();
}
Kilátás:
<form method="POST" th:action="@{/booking/bookingoverview}">
<div class="form-row">
<div class="form-guestGroup col-md-6">
<label class="input_field_label" for="fnameRecipient">First Name</label>
<input type="text" class="form-control" id="fnameRecipient" data-item="fnameRecipient" th:field="${invoiceRecipientDTO.fname}" required>
</div>
</div>
<div class="form-row">
<div class="form-guestGroup col-md-6">
<label class="input_field_label" for="fnameGuest">First Name (Guest)</label>
<input type="text" class="form-control" data-item="fnameGuest" id="fnameGuest" th:field="${guestDTO.fname}">
</div>
</div>
<button type="submit" value="submit">Create Booking</button>
</form>
DTO-k:
public class InvoiceRecipientDTO {
private String id;
private String fname;
private String lname;
//getter and setter..
}
public class GuestDTO {
private String id;
private String fname;
private String lname;
//getter and setter..
}
Amikor megváltoztatom az objektumok attribútumnevét (hogy ne legyenek már azonosak), akkor működik, de nem szeretném megváltoztatni az attribútumneveket. Nincs más megoldás?