为什么我需要这个:
我正在开展一个项目,该项目允许用户选择Nepali Bikram Sambat Date格式的日期(与Java
和SQL's
“DATE”不兼容)。我是通过修改org.codehaus.groovy.grails.plugins.web.taglib.FormTagLib
班级的datePicker
tagLibrary
来完成的。并修改脚手架模板list.gsp
。
我的问题:
当用户从浏览器中选择尼泊尔日期并提交表单时,我想阅读[day, month, year]
并将其转换为Java Date
对象并保存到数据库中。 (当日期显示在视图中时,日期将转换回尼泊尔比克拉姆桑巴特)。
我试图在控制器中打印参数,但是所有参数都已经映射/包装到相应的对象中 - 以及我的尼泊尔日期。所以我从下面的代码中得到Java的日期sysout:
println params.date
我想知道如何拦截表单提交请求并将日期参数修改为英语日期。我看到一个解决方案 - 在表单提交之前使用JavaScript(并将我的转换代码重写为JavaScript)来转换参数。并且只是想确认是否有一种简单的方法 - 如拦截器/过滤器等。
答案 0 :(得分: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将在传递给对象并保存到数据库之前进行转换。无论如何,here是解释它的好链接。
希望它有所帮助!
答案 1 :(得分:1)
好吧,假设您使用带有标准grails datepicker的输入字段,您应该在params映射中使用不同名称传递的字段。在接收请求的操作中写一个“println params”,并查找datepicker字段的名称。它应该带给你一些类似的东西(datepicker字段的名称,比如* + _year,年份,* + _month表示月份等)。