[英]Java Spring Form: map one entity to another entity in JSP form
我有两个实体:“国家/地区”和“联系人”:
@Entity
@Table(name="countries")
@NamedQuery(name="Country.findAll", query="SELECT c FROM Country c")
public class Country implements Serializable {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int id;
private String code;
private String name;
@OneToMany(mappedBy="countryBean")
private List<Contact> contacts;
//...
}
@Entity
@Table(name="contacts")
@NamedQuery(name="Contact.findAll", query="SELECT c FROM Contact c")
public class Contact implements Serializable {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int id;
private String city;
private String street;
@ManyToOne
@JoinColumn(name="countries_id")
private Country countryBean;
//...
}
我需要添加新联系人并从数据库中选择现有国家。
我的控制器有一部分:
@RequestMapping(value="/contact/add", method=RequestMethod.GET)
public String contactAddGetPage(Model model) {
Contact contact = new Contact();
model.addAttribute("contact", contact);
List<Country> countries = countryManager.findAll();
model.addAttribute("countries", countries);
return "contactAdd";
}
@RequestMapping(value="/contact/add", method=RequestMethod.POST)
public String contactAddSave(
@Valid @ModelAttribute("contact") Contact contact, BindingResult result,
Model model, final RedirectAttributes redirectAttributes) {
if (result.hasErrors()) {
model.addAttribute("error", "error");
return "contactAdd";
}
contactManager.save(contact);
redirectAttributes.addFlashAttribute("message", "ok");
return "redirect:/contact";
}
以及使用Spring Form的“ contactAdd.jsp” JSP:
<c:url var="sendToUrl" value="/contact/add" />
<form:form method="post" action="${sendToUrl}" commandName="contact">
<table>
<tr>
<td><form:label path="street">Street</form:label></td>
<td><form:input path="street"/></td>
<td><form:errors path="street"></form:errors></td>
</tr>
<tr>
<td><form:label path="city">City</form:label></td>
<td><form:input path="city"/></td>
<td><form:errors path="city"></form:errors></td>
</tr>
<tr>
<td><form:label path="countryBean">Country</form:label></td>
<td>
<form:select path="countryBean">
<form:options items="${countries}" itemValue="id" itemLabel="name" />
</form:select>
</td>
<td><form:errors path="countryBean"></form:errors></td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="Add" /></td>
</tr>
</table>
</form:form>
如果我在www浏览器中转到表单页面,则看起来还可以。 从数据库中有带有国家名称的html select。
但是,如果我单击“添加”按钮,则会为“国家/地区”表格选择:
无法将属性countryBean的java.lang.String类型的属性值转换为所需的com.example.test.entity.Country类型; 嵌套异常为java.lang.IllegalStateException:无法将属性countryBean的[java.lang.String]类型的值转换为所需的[com.example.test.entity.Country]类型:没有找到匹配的编辑器或转换策略
我了解错误。 我必须将国家/地区转换为“国家/地区”类。 但是我该怎么办呢?
PropertyEditorSupport的效果很好: http : //empire5.com/development/binding-a-custom-object-in-spring-3/
我在MySQL中有错误(数据库中的错误列)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.