0

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

我想知道的是,您如何在 SWF 中有一个带有一些默认值的选择框,例如,“请选择”,它没有绑定到支持列表中的任何值。

根据我创建的转换服务的文档:

public class ApplicationConversionServiceFactoryBean extends FormattingConversionServiceFactoryBean {

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

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

}

这一切都有效,除非我想执行在选择框中包含“请选择”的看似非常简单的任务。

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

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

registry.addConverter(...);

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

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

4

1 回答 1

0

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

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

但是在您的格式化程序或转换器中,您应该检查您的模型属性是否为 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;
    }
}
于 2014-07-14T08:09:07.763 回答