Spring Web Flow Converter

时间:2013-09-11 15:00:16

标签: java spring spring-mvc spring-webflow-2

我有一个Spring MVC和Web Flow 2.3应用程序。

我想知道的是你在SWF中有一个选择框,其中有一些默认值,例如,'Please Select'没有绑定到支持列表中的任何值。

与我创建转换服务的文档一致:

public class ApplicationConversionServiceFactoryBean extends FormattingConversionServiceFactoryBean {

        // formatters
        registry.addFormatter(...);

        // converters
        registry.addConverter(...);

}

除非我想执行在选择框中选择“请选择”这一简单的任务,否则这一切都有效。

格式化程序无法从其解析方法返回null,因此您无法使用它。从格式化器切换到单向转换器(String> Object)然后修复MVC中的问题然而SWF仍然抱怨缺少转换器对象>串。使用此设置我是否真的需要为Object>创建另一个转换器实现?字符串(每次转换基本上都有两个转换器)。

是的,还有其他转换器TwoWayConverter,ObjectToString等等。但是我没有看到这些可以在上面添加,因为它们都是使用以下所有错误类型添加:

registry.addConverter(...);

关于转换的文档至少可以说令人困惑:

http://docs.spring.io/spring-webflow/docs/2.3.x/reference/htmlsingle/spring-webflow-reference.html#converter-options

1 个答案:

答案 0 :(得分:0)

您可以至少将绑定空值或空字符串添加到模型中。因此,您可以使用默认值来选择一个菜单。像这样:

<sf:option value="">Please select...</sf:option>

但是在你的Formatter或Converter中,你应该检查你的模型属性是null还是空字符串,如果是这样,你可以根据需要返回null或空字符串。像这样:

public YourEnum parse(String value, Locale local) throws ParseException {
    if(YourEnum.valueOf(YourEnum.class, value.toUpperCase()) == YourEnum.VALUEONE) {
        return YourEnum.VALUEONE;
    } else if(YourEnum.valueOf(YourEnum.class, value.toUpperCase()) == YourEnum.VALUETWO) {
        return YourEnum.VALUETWO;
    } else {
        return null;
    }
}