2013-05-13 8 views
0

입력이 채워진 경우에만 중첩 된 객체를 인스턴스화 :스프링 MVC - 나는이 모델이

@Entity 
public class User { 
    //... 
    @NotBlank private String login; 
    @NotBlank private String password; 
    @Valid @OneToOne private Person person; 
    //... 
} 

// And 

@Entity 
public class Person { 
    //... 
    @NotBlank private String name; 
    //... 
} 

그리고 사용자 컨트롤러에서이 삽입 방법 :

@RequestMapping(method = POST) 
public String insert(@Valid User user, BindingResult result){ 

} 

그리고이 양식

<p>Login : <input type="text" name="login" /></p> 
<p>Pass : <input type="text" name="password" /></p> 
<p>Name : <input type="text" name="person.name" /></p> 

사람과 사용자 간의 연결은 선택 사항입니다. 따라서 person.name 입력을 채울 필요가 없습니다.

컨트롤러가 사용자 정보를 수신 할 때 @Valid 주석이 User 및 Person 객체를 모두 확인하는 경우에도 person.name이 비어 있습니다.

컨트롤러가 Person 개체 인스턴스를 항상 받는다는 것을 깨달았습니다.

person.name 입력이 채워지지 않은 경우 Person에서 null을받을 수 있습니까?

양식에서 person.name 입력을 제거하면 OK이며 null이 표시됩니다. 그러나 페슨 이름은 선택 사항이며 폼에서 제거 할 수 없습니다.

답변

0

봅니다 사람 이름에 @NotBlank를 제거 :

@Entity 
public class Person { 

    private String name; 

} 
+0

감사 회신 할 수 있습니다. Person의 인스턴스가 유효성 검사를 통과하지 않기 때문에이 작업이 가능합니다. 이름의 존재를 확인해야합니다 (다른 삽입 양식에 있음). 문제 : 입력이 비어 있어도 나는 여전히 사람의 물건을 받고 있습니다. Person.name을 채우지 않으면 올바른 인스턴스가 생성되지 않습니다. 감사합니다 – user1712326

+0

나는 당신의 코드에서 을 얻었 기 때문에 그것을 생각합니다. 입력을 삭제하면 어떻게됩니까? 그게 효과가 있니? –

+0

또는 자바 스크립트로 트릭을 할 수 있습니다. 사용자가 채우지 않으면 person.name을 공백으로 채 웁니다. 제출시 제출하십시오. –