以下是该方案:
List<PortalBranding>
使用form:select
<form:select path="branding">
<form:option value="-" label="--Please Select"/>
<form:options items="${brandingList}" itemValue="id" itemLabel="name"/>
</form:select>
选中后,默认情况下会尝试将值作为String发送,我想将其转换为PortalBranding对象。所以我添加了@InitBinder
方法,我可以注册我的自定义编辑器:
public class PortalBrandingEditor extends PropertyEditorSupport { ... }
但是如果我希望它能够访问一些通过id加载对象的服务,我希望Spring根据一些注释创建实例(我会在这个编辑器中放置一些@Autowired字段)。那是好方法吗?什么语音最适合它?期待一些建议。
答案 0 :(得分:0)
我现在找到了工作解决方案。
我只是在Editor类中创建新的PortalBranding,设置它的id。所以门户网站的品牌标识存在。其余的由Persistance(Hibernate)完成。
但仍期待其他解决方案:)。
答案 1 :(得分: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>
这就是它的全部内容。