我有以下(简化为骨)控制器:
@Controller
public class TestController {
@RequestMapping(value = "/test.htm", method = RequestMethod.GET)
public String showForm(final ModelMap map) {
final TestFilter filter = new TestFilter();
filter.setStartDate(new Date(System.currentTimeMillis()));
map.addAttribute("reportPerResourceForm", filter);
return "test";
}
@InitBinder
public void initBinder(final WebDataBinder binder) {
binder.registerCustomEditor(Date.class, null, new CustomDateEditor(new SimpleDateFormat("dd/MM/yyyy"), true));
}
}
该jsp:
<form:form commandName="reportPerResourceForm" id="reportForm">
<form:input path="startDate" />
</form:form>
这是我快速创建的一个控制器,用于测试我在使用另一个视图控制器时遇到的问题。正如您在控制器中看到的那样,定义了一个 CustomeDateEditor。在我的实际控制器中,这个编辑器工作正常;例如,当您在表单字段中输入 11/01/2010 时,编辑器会很好地将其转换为日期;同样,当返回表单时,日期再次很好地转换回字符串。
但是,当我(如在 TestController 中)想要在表单上设置默认日期时,它会简单地在表单字段中显示 Date.toString(),而不是使用来自 CustomDateEditor.getAsText() 的返回值!经过一些调试,我了解到当 RequestMethod == GET 时没有调用我的 InitBinder 方法。这是正常的吗?
我确定我可以通过不使用来解决这个问题
谢谢你的帮助,
斯蒂恩