Я пытаюсь разработать простую форму клиента, в которой у клиента может быть несколько хобби, для чего я использовал схему отображения OneToMany в hibernate, как показано ниже, а также я создал специальный редактор для преобразования строковых значений хобби в тип CustomerHobbies. , но это просто не работает, на самом деле ничего не происходит, строковые значения хобби даже не доходят до моего специального редактора:
Customer (Entity)
@OneToMany(mappedBy="customer",cascade=CascadeType.ALL)
private List<CustomerHobbies> listOfHobbies= new ArrayList<CustomerHobbies>();
CustomerHobbies (Entity)
@ManyToOne
@JoinColumn(name="customerId")
private Customer customer;
Теперь, перед тем как сохранить это с помощью метода saveCustomer () в моем контроллере, я хочу преобразовать входящие значения CustomerHobbies String [] в список значений CustomerHobbies, чтобы избежать исключения java.lang.illegalStateException. Для которого я сделал код в специальном редакторе ...
public class CustomerHobbbiesEditor extends PropertyEditorSupport{
public void setAsText(Object hobbies) throws IllegalArgumentException{
System.out.println("Reached here");
System.out.println("String "+hobbies);
java.util.List<CustomerHobbies> list2= new ArrayList<CustomerHobbies>();
for(String s: (String [])hobbies)
{
CustomerHobbies hobbiesObj= new CustomerHobbies();
hobbiesObj.setCustomer_hobby(s);
list2.add(hobbiesObj);
}
setValue(list2);
}
}
, и я использовал этот редактор в своем контроллере так:
@InitBinder
public void initBinder(WebDataBinder dataBinder,ServletRequestDataBinder binder) {
StringTrimmerEditor stringTrimmerEditor = new StringTrimmerEditor(true);
dataBinder.registerCustomEditor(String.class, stringTrimmerEditor);
dataBinder.registerCustomEditor(java.lang.String[].class, "listOfHobbies",
new CustomerHobbbiesEditor());
}
, а listOfHobbies является множественным выборомкоробка в форме jsp
<form:select path="listOfHobbies" multiple="true">
<c:forEach items="${hobbiesList}" var="hob" varStatus="status">
<option value="${hob.customer_hobby}">${hob.customer_hobby}</option>
</c:forEach>
</form:select>