私は次の列挙型を持っています:
public enum SearchLocationTypes {REGISTRATION, WORKPLACE}
この列挙型+フォーマッターアノテーションファクトリ用のコンバーターとフォーマッターの両方を作成しました(念のため)。
フォーマッター:
public class SearchLocationTypesFormatter implements Formatter<SearchLocationTypes> {
@Override
public String print(SearchLocationTypes type, Locale locale) {
String strType = "";
switch(type) {
case REGISTRATION:
strType = "rg";
break;
case WORKPLACE:
strType = "wp";
break;
}
return strType;
}
@Override
public SearchLocationTypes parse(String strType, Locale locale) throws ParseException {
if(strType.equals("rg")) return SearchLocationTypes.REGISTRATION;
if(strType.equals("wp")) return SearchLocationTypes.WORKPLACE;
else throw new IllegalArgumentException();
}
}
工場:
public class SearchLocationTypesAnnotationFormatterFactory
implements AnnotationFormatterFactory<SearchLocationTypesFormat> {
@Override
public Set<Class<?>> getFieldTypes() {
return new HashSet<Class<?>>(Arrays.asList(new Class<?>[] {SearchLocationTypes.class}));
}
@Override
public Printer<?> getPrinter(SearchLocationTypesFormat a, Class<?> type) {
return new SearchLocationTypesFormatter();
}
@Override
public Parser<?> getParser(SearchLocationTypesFormat a, Class<?> type) {
return new SearchLocationTypesFormatter();
}
}
注釈:
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
public @interface SearchLocationTypesFormat {}
コンバータ:
public class SearchLocationTypesConverter implements Converter<SearchLocationTypes, String> {
@Override
public String convert(SearchLocationTypes type) {
String strType = "";
switch(type) {
case REGISTRATION:
strType = "rg";
break;
case WORKPLACE:
strType = "wp";
break;
}
return strType;
}
}
servlet.xmlの一部:
<mvc:annotation-driven conversion-service="conversionService" />
<bean id="conversionService"
class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<property name="converters">
<set>
<bean class="ru.riado.web.format.SearchLocationTypesConverter" />
</set>
</property>
<property name="formatters">
<set>
<bean class="ru.riado.web.format.SearchLocationTypesAnnotationFormatterFactory" />
<bean class="ru.riado.web.format.SearchSortTypesFormatter" />
</set>
</property>
</bean>
JSPから次のコードを呼び出すと、すべてが期待どおりに機能します。
例:「REGISTRATION」に設定されたプロパティ「locType」を持つBean「form」があるとします。
public class Form {
@SearchLocationTypesFormat
private SearchLocationTypes locType;
// setters and getters
}
今、私は次のコードを使用しており、その出力は「rg」です。
<s:eval expression="form.locType">
しかし、春の形はその値を「rg」に変換しません。これの代わりに、デフォルトのコンバーターを使用しているかのように、値を「REGISTRATION」に設定します。デフォルトの変換をオフにしようとしましたが、それは役に立ちませんでした。
誰かが私がここで欠けているものを教えてもらえますか?