使用<form:select>和<form:option>使用转换器但转换没有发生,为什么?</form:option> </form:select>

时间:2013-04-29 14:38:42

标签: spring spring-mvc

我有这个表格来创建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 个答案:

答案 0 :(得分:1)

在这里找到解决方案: http://forum.springsource.org/showthread.php?84003-Converters-no-matching-editors-or-conversion-strategy-found

我刚刚更换了

<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