spring mvc form:选择标签

我有一个Model,它包含一个Country(List)列表和一个包含Country对象的用户对象。 我认为用户可以选择他的国家。
这是我的jsp页面的片段:

Select your country

这是我的帐户模型:

 public class Account { private User user; private List countries; public User getUser() { return user; } public void setUser(User user) { this.user = user; } public List getCountries() { return countries; } public void setCountries(List countries) { this.countries = countries; } } 

当jsp加载(GET)表单时:select显示当前用户所在国家/地区的选定项目。 问题是,当我发布表单时,我得到这个例外:

 Field error in object 'account' on field 'user.country': rejected value [90]; codes [typeMismatch.account.user.country,typeMismatch.user.country,typeMismatch.country,typeMismatch.org.MyCompany.entities.Country,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [account.user.country,user.country]; arguments []; default message [user.country]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'org.MyCompany.entities.Country' for property 'user.country'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [java.lang.String] to required type [org.MyCompany.entities.Country] for property 'country': no matching editors or conversion strategy found] 

知道如何克服这个问题吗?

你需要以某种方式告诉Spring将String转换为Country 。 这是一个例子:

 @Component public class CountryEditor extends PropertyEditorSupport { private @Autowired CountryService countryService; // Converts a String to a Country (when submitting form) @Override public void setAsText(String text) { Country c = this.countryService.findById(Long.valueOf(text)); this.setValue(c); } } 

 ... public class MyController { private @Autowired CountryEditor countryEditor; @InitBinder public void initBinder(WebDataBinder binder) { binder.registerCustomEditor(Country.class, this.countryEditor); } ... }