首页 文章

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

提问于
浏览
1

我有这个用于创建 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 回答

相关问题