0

这是场景:

  1. 控制器准备可用品牌列表(CrudRepository、数据库)。List<PortalBranding>
  2. 此列表转到 View as ModelMap 属性。
  3. 查看列表他们使用form:select

      <form:select path="branding">
            <form:option value="-" label="--Please Select"/>
            <form:options items="${brandingList}" itemValue="id" itemLabel="name"/>
      </form:select>
    
  4. 选中后,默认情况下它会尝试将值作为字符串发送,我想将其转换为 PortalBranding 对象。所以我添加了@InitBinder可以注册自定义编辑器的方法:

    public class PortalBrandingEditor extends PropertyEditorSupport { ... }
    

    但是如果我希望它能够访问一些通过 id 加载对象的服务,我希望 Spring 基于一些注释创建实例(我会在这个编辑器中放置一些 @Autowired 字段)。这是好方法吗?什么annonation最适合它?期待一些建议。

4

2 回答 2

0

我现在找到了可行的解决方案。

我只是在 Editor 类中创建了新的 PortalBranding,并将其设置为 id。因此,门户网站具有带有 id 的品牌,该 id 存在。其余的由 Persistance (Hibernate) 完成。

但仍然期待其他解决方案:)。

于 2013-11-14T13:27:45.353 回答
0

你需要的是 Spring 的ConversionService. 这是参考:http ://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#core-convert

简单地实现Converter类似这样:

public class StringToPortalBrandingConverter implements Converter<String, PortalBranding> {

    @Inject // or @Autowire
    SomeService someService; // Some service or other dependency you need.

    @Override
    public PortalBranding convert(String source) {
        // Do your conversion from 'source' to 'PortalBranding' here.
        // You can make use of your injected 'someService' as well.
        ...
        return portalBranding;
    }
}

然后,你只需要告诉 Spring 你的自定义转换器:

<mvc:annotation-driven conversion-service="conversionService"/>

<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
    <property name="converters">
        <set>
            <bean class="yourpackage.StringToPortalBrandingConverter"/>
        </set>
    </property>
</bean>

这里的所有都是它的。

于 2013-11-14T16:40:39.310 回答