我有这个表格来创建Enrichment
:
<form:form method="post" action="..." modelAttribute="enrichment">
...
<form:select path="tag">
<form:options items="${tagList}" itemValue="id" itemLabel="label" />
</form:select>
...
Enrichment
类具有Tag
属性。因此,当用户在Tag列表中选择了一个标签时,将通过表单发送tag.id(它是一个String)。我不认为我可以直接发送标签对象吗?所以我写了一个转换器,根据http://static.springsource.org/spring/docs/current/spring-framework-reference/html/validation.html#core-convert-Converter-API将字符串转换为标签。所以我这样做了:
public class IdToTagConverter implements Converter<String, Tag> {
@Autowired
TagService tagService;
public Tag convert(String id) {
return tagService.findTagById(Integer.parseInt(id));
}
}
我创建了bean:
<bean id="conversionService"
class="org.springframework.context.support.ConversionServiceFactoryBean">
<property name="converters">
<list>
<bean class="exemple.IdToTagConverter"/>
</list>
</property>
</bean>
我认为它会自动进行转换。但错误信息仍在此处:
[无法将'java.lang.String'类型的属性值转换为 属性'tag'的必需类型'exemple.Tag';嵌套异常是 java.lang.IllegalStateException:无法转换类型的值 [java.lang.String]到属性'tag'的必需类型[exemple.Tag]: 找不到匹配的编辑器或转换策略]
我错过了什么?
答案 0 :(得分:1)
我刚刚更换了
<mvc:annotation-driven />
通过
<mvc:annotation-driven conversion-service="conversionService" />
它有效。为什么? Spring MVC Voodoo。
答案 1 :(得分:0)
看起来Spring并不知道您的转换器或转换服务。按照文档的这一部分注册您的自定义转换器 - &gt; http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/validation.html#format-configuring-FormattingConversionService