에서 다른 기업에 하나의 엔티티 저는 두 기관이 : 국가 및 연락처 : 나는 새 연락처를 추가하고 데이터베이스에서 기존의 국가를 선택해야자바 봄 형태 :지도 JSP 양식
@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";
}
그리고
"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>
그것을 좋아 보이는
내 컨트롤러의 일부입니다. 데이터베이스의 국가 이름과 함께 html select가 있습니다. 내가 "추가"버튼을 클릭하면
는, 나는 선택 "나라"양식을 얻을 :
필수 유형 com.example.test.entity에 java.lang.String 타입의 속성 값을 변환하는 데 실패 CountryBean의 propertyBean; 중첩 예외가 java.lang.IllegalStateException : [country] 유형의 값을 [com.example.test.entity.Country]로 변환 할 수 없습니다. countryBean : 일치하는 편집기 또는 변환 전략이 없습니다.
오류가 있습니다. 나라를 "국가"반으로 전환해야합니다. 그러나 나는 그것을 어떻게 할 수 있는가?
나는 http://stackoverflow.com/a/724523/1974494, http://empire5.com/development/binding-a-custom-object-in-spring-3/을 시도하지만 작동하지 않습니다. 이제 "countryBean 속성 예외가 발생했습니다. 중첩 예외는 java.lang.NullPointerException입니다." – martin