我的应用程序中有一个名为Foo的数据类型,如下所示:
public class Foo {
// synthetic primary key
private long id;
// unique business key
private String businessKey;
...
}
此类型在整个Web应用程序中以多种形式使用,通常您希望使用id
属性来回转换它,因此我实现了Spring3 Formatter,并使用全局Spring注册了该格式化程序转换服务。
但是,我有一个表单用例,我希望使用businessKey
进行转换。实现一个Formatter很容易,但是我怎么告诉Spring将这个格式化器用于这个特定的形式呢?
我在http://static.springsource.org/spring/previews/ui-format.html找到了一个文档,其中有一节关于注册特定于字段的格式化程序(参见底部的5.6.6),它提供了这个示例:
@Controller
public class MyController {
@InitBinder
public void initBinder(WebDataBinder binder) {
binder.registerFormatter("myFieldName", new MyCustomFieldFormatter());
}
...
}
这正是我想要的,但这是2009年的预览文档,它看起来并不像registerFormatter
方法进入最终发布的API。
你打算怎么做?
答案 0 :(得分:2)
在我们的应用程序中,我们使用PropertyEditorSupport
类。处理日历的简单示例,但您可以用于任何自定义类,只需覆盖getAsText()
和setAsText()
方法:
@InitBinder
public void initBinder(WebDataBinder binder) {
binder.registerCustomEditor(Calendar.class, new PropertyEditorSupport() {
@Override
public void setAsText(String value) {
try {
Calendar cal = Calendar.getInstance();
cal.setTime(new SimpleDateFormat("dd-MM-yyyy").parse(value));
setValue(cal);
} catch (ParseException e) {
setValue(null);
}
}
@Override
public String getAsText() {
if (getValue() == null) {
return "";
}
return new SimpleDateFormat("dd-MM-yyyy").format(((Calendar) getValue()).getTime());
}
});
}