spring mvc form:select tag
19,241
You need to somehow tell Spring to convert a String
to a Country
. Here is an example :
@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);
}
...
}
Author by
Mr T.
Updated on June 06, 2022Comments
-
Mr T. almost 2 years
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:<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:
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?