2014-05-20 5 views
0

에서 다른 기업에 하나의 엔티티 저는 두 기관이 : 국가 및 연락처 : 나는 새 연락처를 추가하고 데이터베이스에서 기존의 국가를 선택해야자바 봄 형태 :지도 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 : 일치하는 편집기 또는 변환 전략이 없습니다.

오류가 있습니다. 나라를 "국가"반으로 전환해야합니다. 그러나 나는 그것을 어떻게 할 수 있는가?

+0

나는 http://stackoverflow.com/a/724523/1974494, http://empire5.com/development/binding-a-custom-object-in-spring-3/을 시도하지만 작동하지 않습니다. 이제 "countryBean 속성 예외가 발생했습니다. 중첩 예외는 java.lang.NullPointerException입니다." – martin

답변