Jestem nowa w Spring MVC. Piszę aplikację, która używa Spring, Spring MVC i JPA/Hibernate Nie wiem, jak ustawić Spring MVC ustawić wartość pochodzącą z rozwijanego menu na obiekt modelu. Mogę sobie wyobrazić, że jest to bardzo powszechny scenariuszOprawa opadająca wiosną MVC
Oto kod:
Invoice.java
@Entity
public class Invoice{
@Id
@GeneratedValue
private Integer id;
private double amount;
@ManyToOne(targetEntity=Customer.class, fetch=FetchType.EAGER)
private Customer customer;
//Getters and setters
}
Customer.java
@Entity
public class Customer {
@Id
@GeneratedValue
private Integer id;
private String name;
private String address;
private String phoneNumber;
//Getters and setters
}
invoice.jsp
<form:form method="post" action="add" commandName="invoice">
<form:label path="amount">amount</form:label>
<form:input path="amount" />
<form:label path="customer">Customer</form:label>
<form:select path="customer" items="${customers}" required="true" itemLabel="name" itemValue="id"/>
<input type="submit" value="Add Invoice"/>
</form:form>
InvoiceCon troller.java
@Controller
public class InvoiceController {
@Autowired
private InvoiceService InvoiceService;
@RequestMapping(value = "/add", method = RequestMethod.POST)
public String addInvoice(@ModelAttribute("invoice") Invoice invoice, BindingResult result) {
invoiceService.addInvoice(invoice);
return "invoiceAdded";
}
}
Gdy InvoiceControler.addInvoice() jest wywoływana faktura przykład umieszczany jako parametr. Faktura ma kwotę zgodnie z oczekiwaniami, ale atrybut instancji klienta ma wartość NULL. Dzieje się tak, ponieważ wpis http przesyła identyfikator klienta, a klasa Faktura oczekuje obiektu klienta. Nie wiem, jaki jest standardowy sposób przekonwertowania tego.
Przeczytałem o Controller.initBinder(), o konwersji typu Spring (w http://static.springsource.org/spring/docs/current/spring-framework-reference/html/validation.html), ale nie wiem, czy jest to rozwiązanie dla tego problemu.
Wszelkie pomysły?
Zrobiłem to działa zastępując przez –