3

为什么我需要这个:

我正在一个项目中工作,该项目允许用户选择尼泊尔 Bikram Sambat 日期Java格式的日期(与SQL's“日期”不兼容)。我通过修改org.codehaus.groovy.grails.plugins.web.taglib.FormTagLib类的datePicker tagLibrary. 并修改脚手架模板list.gsp

在此处输入图像描述

我的问题 :

当用户从浏览器中选择尼泊尔日期并提交表单时,我想阅读[day, month, year]并将其转换为Java Date对象并保存到数据库中。(当它显示在视图中时,日期将转换回尼泊尔的 Bikram Sambat)。

我试图在控制器中打印参数,但所有参数已经映射/包装到相应的对象中 - 以及我的尼泊尔日期。所以我从下面的代码中得到了 Java 日期的 sysout:

println params.date

我想知道如何拦截表单提交请求并将日期参数修改为英文日期。我看到了一种解决方案 - 在表单提交之前使用 JavaScript(并将我的转换代码重写为 JavaScript)来转换参数。只是想确认是否有一种简单的方法-例如拦截器/过滤器等。

4

2 回答 2

1

您可以创建一个 CustomEditorRegistrar 来更改您的日期格式,然后再将其包装到对象中。像这样:

public class CustomDateEditorRegister implements PropertyEditorRegistrar {

    public void registerCustomEditors(PropertyEditorRegistry registry) {

        String dateFormat = 'dd/MM/yyyy'
        registry.registerCustomEditor(Date, new CustomDateEditor(new SimpleDateFormat(dateFormat), true))
    }


}

您的日期编辑器可能类似于:

class CustomSimpleDateEditor extends CustomDateEditor {

    public CustomSimpleDateEditor(SimpleDateFormat formatter, boolean allowEmpty) {
        super(formatter, allowEmpty);
    }

    public String getAsText() {
        Date date = (Date)getValue();
        try {
            String dateText = new SimpleDateFormat("dd/MM/yyyy").parse(date);
            return dateText;
        } 
        catch(Exception e) {
            e.printStackTrace();
            return "";
        }
    }

}

您的 params.date 将在传递给对象并保存到数据库之前进行转换。无论如何,这里有一个很好的链接来解释它。

希望能帮助到你!

于 2012-07-23T14:53:17.610 回答
1

好吧,假设您使用标准 grails 日期选择器的输入字段,您应该在参数映射中包含正在传递的字段,只是名称不同。在接收请求的操作中编写“println 参数”并查找日期选择器的字段名称。它应该给你带来类似的东西(日期选择器字段的名称,比如* + _year,代表年份,* + _month 代表月份等等)。

于 2012-07-24T14:57:12.963 回答