Skip to content

Commit 1580789

Browse files
committed
Fix for LocalDate
1 parent 759efbd commit 1580789

File tree

4 files changed

+12
-2
lines changed

4 files changed

+12
-2
lines changed

grails-fields/grails-app/taglib/grails/plugin/formfields/FormFieldsTagLib.groovy

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -950,11 +950,13 @@ class FormFieldsTagLib {
950950
case Boolean:
951951
g.formatBoolean(boolean: model.value)
952952
break
953+
case LocalDate:
954+
g.formatDate(date: model.value, format: 'yyyy-MM-dd')
955+
break
953956
case Calendar:
954957
case Date:
955958
case java.sql.Date:
956959
case java.sql.Time:
957-
case LocalDate:
958960
case LocalDateTime:
959961
case Instant:
960962
case ZonedDateTime:

grails-fields/src/test/groovy/grails/plugin/formfields/DisplayWidgetSpec.groovy

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,11 @@ class DisplayWidgetSpec extends AbstractFormFieldsTagLibSpec implements TagLibUn
4646
applyTemplate('<f:displayWidget bean="cyborgInstance" property="timestamp"/>', [cyborgInstance: cyborgInstance]) == applyTemplate('<g:formatDate date="${cyborgInstance.timestamp}"/>', [cyborgInstance: cyborgInstance])
4747
}
4848

49+
void 'f:displayWidget without template and a LocalDate value renders the formatted date'() {
50+
expect:
51+
applyTemplate('<f:displayWidget bean="cyborgInstance" property="birthDate"/>', [cyborgInstance: cyborgInstance]) == applyTemplate('<g:formatDate date="${cyborgInstance.birthDate}" format="yyyy-MM-dd"/>', [cyborgInstance: cyborgInstance])
52+
}
53+
4954
void 'f:displayWidget without template and a boolean value renders the formatted boolean'() {
5055
expect:
5156
applyTemplate('<f:displayWidget bean="personInstance" property="minor"/>', [personInstance: personInstance]) == applyTemplate('<g:formatBoolean boolean="${personInstance.minor}"/>', [personInstance: personInstance])

grails-fields/src/test/groovy/grails/plugin/formfields/mock/Person.groovy

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
package grails.plugin.formfields.mock
2020

2121
import java.time.Instant
22+
import java.time.LocalDate
2223

2324
import grails.gorm.annotation.AutoTimestamp
2425
import grails.persistence.Entity
@@ -28,6 +29,7 @@ class Cyborg extends Person {
2829
@AutoTimestamp(AutoTimestamp.EventType.CREATED) Date created
2930
@AutoTimestamp Date modified
3031
Instant timestamp
32+
LocalDate birthDate
3133
}
3234

3335
@Entity

grails-fields/src/test/groovy/grails/plugin/formfields/taglib/AbstractFormFieldsTagLibSpec.groovy

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
package grails.plugin.formfields.taglib
2121

2222
import java.time.Instant
23+
import java.time.LocalDate
2324

2425
import grails.core.support.proxy.DefaultProxyHandler
2526
import grails.plugin.formfields.BeanPropertyAccessorFactory
@@ -47,7 +48,7 @@ abstract class AbstractFormFieldsTagLibSpec extends Specification implements Gra
4748
personInstance.address = new Address(street: "94 Evergreen Terrace", city: "Springfield", country: "USA")
4849
personInstance.emails = [home: "[email protected]", school: "[email protected]"]
4950
productInstance = new Product(netPrice: 12.33, name: "<script>alert('XSS');</script>")
50-
cyborgInstance = new Cyborg(name: "Hal", password: "monolith", gender: null, timestamp: Instant.parse("2025-10-16T00:12:15.195Z"))
51+
cyborgInstance = new Cyborg(name: "Hal", password: "monolith", gender: null, timestamp: Instant.parse("2025-10-16T00:12:15.195Z"), birthDate: LocalDate.of(2025, 10, 15))
5152
}
5253

5354
def cleanup() {

0 commit comments

Comments
 (0)