2013-09-11 5 views
0

У меня есть приложение Spring MVC и Web Flow 2.3.Spring Web Flow Converter

Все, что я хотел бы знать, это то, как у вас есть поле выбора в SWF с некоторым значением по умолчанию, например, «Пожалуйста, выберите», который не привязан к какому-либо значению в списке поддержки.

В соответствии с Документами я создал службу преобразования:

public class ApplicationConversionServiceFactoryBean extends FormattingConversionServiceFactoryBean { 

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

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

}

Это все работает, если я не хочу, чтобы выполнить то, что, казалось бы, совершенно простой задачей иметь «Пожалуйста, выберите 'в поле выбора.

Форматер не может вернуть null из своего метода Parse, поэтому вы не можете его использовать. Переключение с форматирования на односторонний конвертер (String> Object) исправляется, а затем возникает в материалах MVC, однако SWF все еще жалуется на отсутствующий конвертер для Object> String. Используя эту настройку, мне действительно нужно создать другую реализацию конвертера для Object> String (по существу, для каждого преобразования есть два конвертера).

Да, есть и другие преобразователи TwoWayConverter, ObjectToString и т.д. и т.п., однако я не вижу, что они могут быть добавлены в выше, все они все неправильный тип, чтобы быть добавлены с помощью:

registry.addConverter (...);

документация вокруг преобразования сбивает с толку, мягко говоря:

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

ответ

0

Вы можете сделать по крайней мере добавления привязки нулевое значение или пустую строку в вашей модели. Таким образом, вы можете использовать значение по умолчанию для выбора одного меню. Как это:

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

Но в вашем Formatter или конвертер, вы должны проверить вашу модель свойство равно нулю или пустая строка, и если да возвращать нуль или пустую строку, как вам нравится. Пример:

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