Spring Roo:finder将无效的日期格式放入url

时间:2012-05-29 18:40:22

标签: spring spring-mvc spring-roo

我有一个名为WorkOrder的Spring Roo mvc项目。我使用Roo shell为这个模型生成两个finder:findWorkOrdersByDateCompletedEquals和findWorkOrdersByDateCompletedBetween。

问题:当我使用findWorkOrdersByDateCompletedBetween进行搜索时,url中的minDateCompleted和maxDateCompleted参数格式错误(S格式)

.../workorders?find=ByDateCompletedBetween&minDateCompleted=2012-05-08&maxDateCompleted=2012-05-31

以下是调试日志中的错误:

Failed to convert from type java.lang.String to type 
@org.springframework.web.bind.annotation.RequestParam
@org.springframework.format.annotation.DateTimeFormat java.util.Date for value '2012-05-15';

有趣的是findWorkOrdersByDateCompletedEquals工作正常,并生成这样的URL:

.../workorders?find=ByDateCompletedEquals&dateCompleted=May+30%2C+2012

什么决定了这些网址的生成方式?两个查找器之间的代码实际上是相同的,为什么它们会以不同的格式生成日期?

2 个答案:

答案 0 :(得分:1)

我发现了真正的问题,看起来这是Spring roo的一个错误。控制器.aj文件中有一个Roo没有更新的方法:

void addDateTimeFormatPatterns(Model uiModel) {
    uiModel.addAttribute("workOrder_datecompleted_date_format", DateTimeFormat.patternForStyle("M-", LocaleContextHolder.getLocale()));
    uiModel.addAttribute("workOrder_maxdatecompleted_date_format", DateTimeFormat.patternForStyle("M-", LocaleContextHolder.getLocale()));
    uiModel.addAttribute("workOrder_mindatecompleted_date_format", DateTimeFormat.patternForStyle("M-", LocaleContextHolder.getLocale()));
}

Roo会自动将“workOrder_datecompleted_date_format”属性放在那里,但我必须自己推入该方法并自行添加maxdatecompleted和mindatecompleted属性。

答案 1 :(得分:0)

我发现这是一种肮脏的方法来解决它..:P

只需更改您所在字段的dateTimePatern属性即可
findWorkOrdersByDateCompletedBetween.jspx

到你所拥有的那个
findWorkOrdersByDateCompletedEquals.jspx

在我的情况下,它就像是
 field:datetime dateTimePattern =“$ { tramite_maxfecha_date_format }”[...]

我把它改成了
 field:datetime dateTimePattern =“$ { tramite_fecha_date_format }”