我有这个表格来创建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.id (它是一个字符串)将通过表单发送。我不认为我可以直接发送标签对象,对吗?所以我根据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”所需的类型“example.Tag”;嵌套异常是 java.lang.IllegalStateException:无法将类型 [java.lang.String] 的值转换为属性“标签”所需的类型 [exemple.Tag]:找不到匹配的编辑器或转换策略]
我错过了什么?