2010-04-15 2 views
4

사용자를 모델링 한 클래스와 사용자 국가를 모델링 한 클래스가 있습니다. 이런 식으로 뭔가 :선택한 옵션에 빈 값이 있으면 중첩 된 객체를 null로 설정합니다.

public class User{ 
    private Country country; 
    //other attributes and getter/setters 
} 

public class Country{ 
    private Integer id; 
    private String name; 
    //other attributes and getter/setters 
} 

나는 사용자가 자신의 국가를 선택하거나 자신이이 정보를 제공 할 doen't 나타 내기 위해 정의되지 않은 옵션을 선택할 수 있도록 내가 콤보 상자가 봄 양식을 가지고있다. 나는 사용자 정보와 autopopulated 개체를 얻을 내 컨트롤러에서

<form:select path="country"> 
    <form:option value="">-Select one-</form:option> 
    <form:options items="${countries}" itemLabel="name" itemValue="id"/> 
</form:select> 

와 나는 "-를 선택하여 원 -"옵션을 선택했을 때 null로 설정 나라를 갖고 싶어 : 그래서 이런 식으로 뭔가가있다.

@InitBinder 
protected void initBinder(WebDataBinder binder) throws ServletException { 
    binder.registerCustomEditor(Country.class, "country", new CustomCountryEditor()); 
} 

내 편집기 같은 것을 할 : 그래서 나는이 같은 사용자 정의 편집기와 initBinder을 설정 한

public class CustomCountryEditor(){ 
    @Override 
    public String getAsText() { 
     //I return the Id of the country 
    } 

    @Override 
    public void setAsText(String str) { 
     //I search in the database for a country with id = new Integer(str) 
     //and set country to that value 
     //or I set country to null in case str == null 
    } 
} 

나는 때 국가 설정 null로하기 때문에 작동 양식을 제출하면 "선택 - 하나 선택"옵션 또는 선택한 국가의 인스턴스를 선택했을 때. 문제는 폼을로드 할 때 다음과 같은 메서드가 사용자 정보를로드한다는 것입니다.

@ModelAttribute("user") 
public User getUser(){ 
    //loads user from database 
} 

내가 인 getUser에서 얻을 목적은() 특정 국가 (안 null 값)으로 설정 나라를 가지고 있지만, 콤보 상자에서 어떤 옵션을 선택하지 않았습니다. 응용 프로그램을 디버깅하고 CustomCountryEditor가 제대로 작동하고 텍스트를 가져올 때 "국가"필드뿐만 아니라 "국가"목록의 모든 항목에 대해 thoughgetAsText 메서드가 호출됩니다.

아이디어가 있으십니까? 콤보 상자에서 국가 옵션을 선택하지 않은 경우 country 개체를 null로 설정하는 더 좋은 방법이 있습니까? 당신은 당신이 사용자를 저장할 때 설정되는 나라에 어떤 값을 사용자에 대한 데이터베이스 테이블을 확인 했

감사

답변

1

문제점은 Spring Security principal 객체에서 User 객체를 가져 오는 것이 었습니다. getUser 메소드를 변경하여 Spring Security에서 ID를 얻었습니다. 데이터베이스에서 검색했습니다. 이제는 모든 것이 작동합니다. 왜 이런 상황이 발생했는지 디버그에서 국가가 Spring에 의해로드되었다는 것을 알 수는 없습니다. 보안.

0

... 그것은 어떤 값의 널 (null)이된다?

+0

숫자가 있습니다. 데이터베이스에 null이 아닙니다. 나는이 ID가 내 편집기의 getAsText() 메소드에서 반환 된 것과 동일한 번호인지 확인했다. – Javi

+0

jsp 페이지와 컨트롤러 코드를 편집 사용자 용으로 게시 할 수 있습니까? –

관련 문제