<form: select> binding objects through a converter in Spring MVC
I am trying to use the Converter to organize the form in Spring MVC, as described here: Spring form binding, how to do it? It is not possible to convert a value of type [java.lang.String] to the required type , but I missed something and the binding does not work.
Some snippets:
Entities:
public class Building { private Long id; private String address; private BankAccount mainIncomeBankAccount; // ... getters, setters, hashCode() and equals() } public class BankAccount { private Long id; private String accountNumber; // ... getters, setters, hashCode() and equals() } JSP:
<form:form commandName="building" action="" method="post"> <form:input type="text" path="address"/> <form:select path="mainIncomeBankAccount"> <form:option label="-- null value --" value="${null}"/> <form:options items="${bankAccounts}" itemLabel="accountNumber" itemValue="id"/> </form:select> <input type="submit"/> </form:form> Controller:
@RequestMapping(value="/edit", method = RequestMethod.POST) @PreAuthorize("hasRole('ROLE_PERMISSION')") public String buildingAdd(@ModelAttribute("building") @Valid Building building, // I already try not to use @ModelAttribute, @Valid, and both. BindingResult result, HttpServletRequest request, Model uiModel, RedirectAttributes redirectModel) { // Some actions ... } Converter
@Component public class BankAccountConverter implements Converter<String, BankAccount> { @Inject private BankAccountUtil bankAccountUtil; public BankAccount convert(String id) { return bankAccountUtil.findById(Long.getLong(id)); } } Servlet Configuration:
<?xml version="1.0" encoding="UTF-8"?> <beans:beans xmlns="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:beans="http://www.springframework.org/schema/beans" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd"> <annotation-driven validator="validator"/> <beans:bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"> <beans:property name="validationMessageSource" ref="messageSource"/> </beans:bean> <context:component-scan base-package="com.mvc.web" /> <beans:bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean"> <beans:property name="converters"> <beans:list> <beans:ref bean="bankAccountConverter"/> </beans:list> </beans:property> </beans:bean> When I submit the building.mainIncomeBankAccount form, the property in the controller is always null. I also tried using Formatter, but I have the same result.
+4
3 answers
In your JSP file try:
<form:form commandName="building" action="" method="post"> <form:input type="text" path="address"/> <form:select path="mainIncomeBankAccount"> <option label="-- null value --" selected disabled /> <form:options items="${bankAccounts}" itemLabel="accountNumber" itemValue="id"/> </form:select> <input type="submit"/> </form:form> 0