我有这个用于创建 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]:找不到匹配的编辑器或转换策略]
我错过了什么?
2 回答
在这里找到解决方案:http://forum.springsource.org/showthread.php?84003-Converters-no-matching-editors-or-conversion-strategy-found
我刚换了
通过
它工作 . 为什么? Spring MVC Voodoo .
看起来Spring不知道您的转换器或转换服务 . 按照文档的这一部分注册您的自定义转换器 - > http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/validation.html#format-configuring-FormattingConversionService