Spring表格绑定怎么办?无法将类型[java.lang.String]的值转换为必需的类型


问题内容

这是我的表格:

<form:form modelAttribute="fooDTO">
fooCountry: 
<form:select path="country">
  <form:options items="${countries}" itemLabel="shortName" itemValue="id"/> 
</form:select>

这是pojo的支持:

public class FooDTO
{
  private Country country;
 //getters and setters present
}

所选选项默认为fooDTO中的国家/地区值,这很好。但是,提交表单时,绑定会失败-
我遇到上述错误,是否必须在绑定器中注册自定义编辑器,或者是否有更简单的方法?国家几乎是您所期望的,国家确实是控制器中填充的国家列表…


问题答案:

Spring 3引入了Converter
SPI,这使得这非常容易。看一下文档中的6.5

从文档中获取资料并放入您的国家/地区,您会做类似的事情

package my.converter;

final class StringToCountry implements Converter<String, Country> {
    public Country convert(String source) {
        return // whatever you do to get a country from your string
    }
}

然后在xml配置中,您将配置转换器

<bean id="conversionService"
      class="org.springframework.context.support.ConversionServiceFactoryBean">
    <property name="converters">
        <list>
            <bean class="my.converter.StringToCountry"/>
        </list>
    </property>
</bean>

正如GriffeyDog指出的那样,您可能希望将国家ID放入选择路径,以便可以通过ID或其他方式(而不是Country对象的toString()返回的值)获得Country。