java spring mvc 形式:选择标签
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/12875299/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
spring mvc form:select tag
提问by Mr T.
I have a Model that holds a list of Countries (List) and a user object that holds a Country object. I have a view that the user can select his country.
This is snippet of my jsp page:
我有一个包含国家(列表)列表的模型和一个包含国家对象的用户对象。我认为用户可以选择他的国家。
这是我的jsp页面的片段:
<form:select path="user.country">
<form:option value="-1">Select your country</form:option>
<form:options items="${account.countries}" itemLabel="name" itemValue="id" />
</form:select>
This is my Account model:
这是我的帐户模型:
public class Account {
private User user;
private List<Country> countries;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public List<Country> getCountries() {
return countries;
}
public void setCountries(List<Country> countries) {
this.countries = countries;
}
}
When the jsp loads (GET) the form:select displays the selected item of the current user country. The problem is that when i post the form i get this exception:
当jsp加载(GET)form: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]
Any idea how i can overcome this?
知道我如何克服这个吗?
采纳答案by Jerome Dalbert
You need to somehow tell Spring to convert a String
to a Country
. Here is an example :
您需要以某种方式告诉 Spring 将 a 转换String
为 a 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);
}
}
and
和
...
public class MyController {
private @Autowired CountryEditor countryEditor;
@InitBinder
public void initBinder(WebDataBinder binder) {
binder.registerCustomEditor(Country.class, this.countryEditor);
}
...
}