域中的日期字段和 g:textField 标记在 Grails 中不起作用
Date field in domain and g:textField tag don't work in Grails
我有一个 用户域扩展自 SecUser 的应用程序(Spring Secrity Core 中的安全用户 class)。在这个域(用户)中,我有几个字段,其中之一是:Date birthDate。脚手架创建了 g:datePicker 标签,但我不喜欢这种风格。
我想实现例如:Datepicker for Boostrap (http://www.eyecon.ro/bootstrap-datepicker/) 但是这个库使用了一个 input type="text" 字段。
在我看来 (.gsp),如果我输入文本,保存和更新操作将不起作用,因为在我的控制器中,当我得到 userInstance.birthDate值为空。
如果我放置 g:datePicker 标签,我的控制器会正确获取值。
我该如何解决这个问题?
谢谢。
编辑:
日期选择器代码 Bootstrap 在我看来:
<div class="input-group date date-picker" data-date-format="dd-MM-yyyy" data-date-end-date="+0d">
<input type="text" id="birthDate" name="birthDate" value="${formatDate(format:'dd-MM-yyyy',date: userInstance?.birthDate)}" class="form-control form-shadow"/>
<span class="input-group-btn">
<button class="btn default" type="button">
<i class="fa fa-calendar"></i>
</button>
</span>
</div>
<span class="help-block">
<h5>
<g:message code="custom.date.picker.description" default="Select a date"/>
</h5>
</span>
现在,我可以使用 params.birthDate 在我的控制器中获取值,但出现下一个错误:
Class java.text.ParseException
Message Unparseable date: "01-04-2016"
已解决:
解决方案是在 Datepicker 中正确解析 Bootstrap 库。该库使用不同的解析器。例如:'01-04-2016' 在 Grails 中是 'dd-MM-yyyy' 但在这个库中是:'dd-mm-yyyy'.
在此 link 中出现以下格式:
https://bootstrap-datepicker.readthedocs.org/en/latest/options.html#format
此外,还需要在Config.groovy中添加如下几行:
grails.databinding.dateFormats = [
'dd-MM-yyyy', 'yyyy-MM-dd', 'yyyy-MM-dd HH:mm:ss.S'
]
直接的解决方案是在控制器操作中映射日期字段:
def save( User user ) {
....
user.birthDate = new SimpleDateFormat( 'dd-MM-yyyy' ).parse params.birthDate
...
}
我有一个 用户域扩展自 SecUser 的应用程序(Spring Secrity Core 中的安全用户 class)。在这个域(用户)中,我有几个字段,其中之一是:Date birthDate。脚手架创建了 g:datePicker 标签,但我不喜欢这种风格。
我想实现例如:Datepicker for Boostrap (http://www.eyecon.ro/bootstrap-datepicker/) 但是这个库使用了一个 input type="text" 字段。
在我看来 (.gsp),如果我输入文本,保存和更新操作将不起作用,因为在我的控制器中,当我得到 userInstance.birthDate值为空。
如果我放置 g:datePicker 标签,我的控制器会正确获取值。
我该如何解决这个问题? 谢谢。
编辑:
日期选择器代码 Bootstrap 在我看来:
<div class="input-group date date-picker" data-date-format="dd-MM-yyyy" data-date-end-date="+0d">
<input type="text" id="birthDate" name="birthDate" value="${formatDate(format:'dd-MM-yyyy',date: userInstance?.birthDate)}" class="form-control form-shadow"/>
<span class="input-group-btn">
<button class="btn default" type="button">
<i class="fa fa-calendar"></i>
</button>
</span>
</div>
<span class="help-block">
<h5>
<g:message code="custom.date.picker.description" default="Select a date"/>
</h5>
</span>
现在,我可以使用 params.birthDate 在我的控制器中获取值,但出现下一个错误:
Class java.text.ParseException
Message Unparseable date: "01-04-2016"
已解决:
解决方案是在 Datepicker 中正确解析 Bootstrap 库。该库使用不同的解析器。例如:'01-04-2016' 在 Grails 中是 'dd-MM-yyyy' 但在这个库中是:'dd-mm-yyyy'.
在此 link 中出现以下格式: https://bootstrap-datepicker.readthedocs.org/en/latest/options.html#format
此外,还需要在Config.groovy中添加如下几行:
grails.databinding.dateFormats = [
'dd-MM-yyyy', 'yyyy-MM-dd', 'yyyy-MM-dd HH:mm:ss.S'
]
直接的解决方案是在控制器操作中映射日期字段:
def save( User user ) {
....
user.birthDate = new SimpleDateFormat( 'dd-MM-yyyy' ).parse params.birthDate
...
}