Java 如何在SpringMVC中将字符串转换为现有实例?
以下是场景:Java 如何在SpringMVC中将字符串转换为现有实例?,java,spring,jsp,model-view-controller,propertyeditor,Java,Spring,Jsp,Model View Controller,Propertyeditor,以下是场景: 控制员准备可用品牌的列表(积存库、数据库)列表 此列表将作为ModelMap属性查看 使用表单查看列表:选择 <form:select path="branding"> <form:option value="-" label="--Please Select"/> <form:options items="${brandingList}" itemValue="id" itemLabel="name"/>
表单查看列表:选择
<form:select path="branding">
<form:option value="-" label="--Please Select"/>
<form:options items="${brandingList}" itemValue="id" itemLabel="name"/>
</form:select>
但若我希望它能够访问某个按id加载对象的服务,我希望Spring基于某个注释创建实例(我会在这个编辑器中放置一些@Autowired字段)。这样好吗?什么样的注释最适合它?期待一些建议
我现在找到了可行的解决办法 我只是在编辑器类中创建新的PortalBranding,设置它的id。这样门户就有了id存在的品牌。其余部分通过持久性(Hibernate)完成
但仍然期待其他解决方案:)。您需要的是Spring的
转换服务。以下是参考资料:
只需执行与此类似的转换器
:
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;
}
}
公共类StringToPortalBrandingConverter实现转换器{
@注入//或@Autowire
SomeService SomeService;//您需要的某些服务或其他依赖项。
@凌驾
公共PortalBranding转换(字符串源){
//在此处执行从“源”到“PortalBranding”的转换。
//你也可以利用你注入的“someService”。
...
返回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>
这就是它的全部。所以我想Spring会在启动时创建这个转换器的实例吗?感谢您的回答,对于这个场景,我可以继续使用我的解决方案,但将来会记住您的解决方案:)。不用担心,这肯定是您的特权,但请记住,您选择使用的方法会产生一个对象,而该对象实际上并不代表您要使用的对象的状态。您只需将id更改为包含该id的空对象……而使用转换器
,您可以一次性正确填充整个对象。此外,一旦您知道如何使用转换器
,您也可以转到格式化程序
,开始充分利用核心转换。(请参阅)我完全理解使用转换器的优点和使用我的转换器的缺点,但在这种情况下,我不需要整个对象。就像我说的,我很感谢你的回答,我会标记它,因为我可能会在其他情况下使用它。
<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>