【问题标题】:Spring Web Flow ConverterSpring Web 流转换器
【发布时间】:2014-07-14 16:09:07
【问题描述】:

我有一个 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

【问题讨论】:

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


    【解决方案1】:

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

    <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;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2023-03-29
      • 1970-01-01
      • 1970-01-01
      • 2015-05-01
      • 1970-01-01
      • 2014-05-24
      • 2013-04-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多