<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
source share
3 answers

You need to associate <mvc:annotation-driven> with your conversion service:

 <annotation-driven validator="validator" conversionService = "conversionService" /> 
+1
source

Have you tried this without the first option:

 <form:option label="-- null value --" value="${null}"/> 

Maybe you will get null, because that is what you send.

0
source

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
source

All Articles