사용자를 모델링 한 클래스와 사용자 국가를 모델링 한 클래스가 있습니다. 이런 식으로 뭔가 :선택한 옵션에 빈 값이 있으면 중첩 된 객체를 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로 설정하는 더 좋은 방법이 있습니까? 당신은 당신이 사용자를 저장할 때 설정되는 나라에 어떤 값을 사용자에 대한 데이터베이스 테이블을 확인 했
감사
숫자가 있습니다. 데이터베이스에 null이 아닙니다. 나는이 ID가 내 편집기의 getAsText() 메소드에서 반환 된 것과 동일한 번호인지 확인했다. – Javi
jsp 페이지와 컨트롤러 코드를 편집 사용자 용으로 게시 할 수 있습니까? –