【问题标题】:Spring webflow binder not binding collection objectSpring webflow binder不绑定集合对象
【发布时间】:2018-12-19 01:42:19
【问题描述】:

我在我的应用程序中使用 spring webflow v2.4.8,并尝试使用 <binder></binder> 绑定模型属性。但是我的集合对象(list1、list2 都是 ArrayList)永远不会被绑定。如果我完全删除 <binder></binder>,所有属性都会正确绑定,但在我的情况下,这不是一个选项。

我需要在这里使用一些自定义转换器吗?非常感谢任何帮助

 <view-state id="myId" model="myModel" view="myView" >
        <binder>
            <binding property="list1"/>
            <binding property="list2"/>
            <binding property="string1"/>
            <binding property="string2"/>
            .
            .
            .
        </binder>
        .
        .
        .
    </view-state>

【问题讨论】:

  • myModel 和 myView 中有什么内容?你能发布一些关于这些文件的信息吗?
  • @rptmat57 myModel 是一个普通的 POJO,带有常用的 getter 和 setter,myView 是一个 jsp 页面。如果我们不提供自定义活页夹,它似乎很奇怪!
  • 它在您代码中的其他地方是否有效,或者这是您第一次使用转换器?另外,你在扩展 Spring 的 CustomDefaultConversionService 吗?
  • 我没有使用任何转换器
  • 如果字段是字符串而不是集合,它是否有效?

标签: spring spring-webflow spring-webflow-2


【解决方案1】:

已经有一段时间了,但在我的项目中,我有一个自定义的 ConversionService,所以也许你可以尝试使用这样的一个:

[编辑]

这是一个使用服务的转换器示例(从数据库中获取对象)

@Named
public class StringToMyType extends StringToObject {

    @Inject
    private MyTypeService service;

    public StringToMyType(MyType myObject) {
        super(myObject);
    }

    @Override
    protected Object toObject(String id, Class<?> targetClass) throws Exception {
        if (id != null && id.length != 0) {
            return service.findById(new Long(id));
        } else return null;
    }

    @Override
    protected String toString(Object myObject) throws Exception {
        return Objects.toString(((MyType) myObject).getId());
    }
}

并在此处添加

public class CustomDefaultConversionService extends DefaultConversionService {

    @Override
    protected void addDefaultConverters() {
        super.addDefaultConverters();
        addConverter(new MyTypeConverter()
        addConverter(new ObjectToCollection(this));
    }
}

然后需要以这种方式注册(xml):

<webflow:flow-builder-services id="flowBuilderServices" view-factory-creator="mvcViewFactoryCreator" conversion-service="conversionService"/>

<bean id="conversionService" class="path.to.converter.CustomDefaultConversionService"/> 

希望对你有帮助

【讨论】:

  • 试过这个.. 但没有运气
  • 您的收藏中有哪些物品?如果它们不是基本类型,您是否有自定义转换器?
  • 集合是自定义类型,如 List,不,没有自定义转换器
  • 嗯,大概就是这样。您将需要一个自定义的MyType 转换器
  • @slashron 我用MyType的转换器示例编辑我的答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-27
  • 1970-01-01
  • 2012-07-03
  • 1970-01-01
  • 2011-01-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多