About Me
Introduction
- Grails versions
- Code samples
Configuration
- Using Bintray JCenter as Repository
- Add Banner to Grails Application
- Add Banner To Grails 3.1 Application
- Set Log Level for Grails Artifacts
- Add Some Color to Our Logging
- Save Application PID in File
- Saving Server Port In A File
- Log Startup Info
- Changing Gradle Version
- Adding Health Check Indicators
- Add Git Commit Information To Info Endpoint
- Adding Custom Info To Info Endpoint
- Passing System Properties With Gradle
- Update Application With Newer Grails Version
- Access Grails Application in BootStrap
- Using Spring Cloud Config Server
- Multiple BootStraps
- Cleaning Up Before WAR Creation
- Logging Service Method Calls with Dynamic Groovy
- Multiple Environments
- Execute Code for Current Environment
- Use Different External Configuration Files
- Using External Configuration Files Per Environment
- Change Base Name For External Configuration Files
- Using Random Values For Configuration Properties
- Pass Configuration Values Via Environment Variables
- Pass JSON Configuration Via Command Line
- One WAR to Rule Them All
- Customize the URL Format
- Add Additional Web Application to Tomcat
- Use a Different jQuery UI Theme with Resources Plugin
- Use A Different Logging Configuration File
- Add a DailyRollingFileAppender to Grails Logging
- Use Log4j Extras Companion RollingFileAppender
- Use TimeAndSizeRollingAppender for Logging
- Change Context Path of a Grails Application for Jetty
- Change Version For Dependency Defined By BOM
The Command Line
- Script Name Abbreviation
- Shortcut to Open Test Reports in Interactive Console
- Run Gradle Tasks In Grails Interactive Mode
- See Information About Plugins
- Get List Of Application Profiles
- Getting More Information About A Profile
- Using Features When Creating An Application
- Create Report of URL Mappings
- Compiling GSP from the Command-Line
- Profile Script Tasks
- No More Questions
- Create New Application without Wrapper
- Enable Hot Reloading For Non-Development Environments
- Generate ANT Build Script
- Generate Default .gitignore Or .hgignore File
- Extending IntegrateWith Command
- Using Wrapper for Running Grails Commands Without Grails Installation
- Cleaning Up
- Using Aliases as Command Shortcuts
- Run Groovy Scripts in Grails Context
- Add More Paths to the Stats Report
- Access Configuration in Grails Scripts
- Simple Script to Create WAR Files for Each Environment
Grails Object Relational Mapping (GORM)
- Getting First or Last Instance of Domain Classes
- Using Hibernate Native SQL Queries
- Using Groovy SQL
- Refactoring Criteria Contents
Validation and Data Binding
- Add Extra Valid Domains and Authorities for URL Validation
- Combining Constraints with Shared Constraints
- Custom Data Binding with @DataBinding Annotation
Controllers
- Type Conversion on Parameters
- Get Values from Parameters with Same Name
- Get Request Parameters with Default Values
- Date Request Parameter Value Conversions
- Binding Method Arguments in Controller Methods
- Controller Properties as Model
- Using the header Method to Set Response Headers
- Render Binary Output with the File Attribute
- Exception Methods in Controllers
- Namespace Support for Controllers
- Grouping URL Mappings
Groovy Server Pages (GSP)
- Change Scaffolding Templates in Grails
- Use the GSP Template Engine in a Controller
- The Template Namespace
- Templates Can Have a Body
- The Link Namespace
- Format Boolean Values with the formatBoolean Tag
- Encode Content with the encodeAs Tag
- Set Application Wide Default Layout
- Applying Layouts in Layouts
- Applying Layouts in Layouts Revisited
- Access Action and Controller Name in GSP
- Get GrailsApplication and ApplicationContext in GSP
- Use Services in GSP with g:set Tag
- Generating Raw Output with Raw Codec
- Using Closures for Select Value Rendering
REST
- Customize Resource Mappings
- Pretty Print XML and JSON Output
- Include Domain Version Property in JSON and XML Output
- Enable Accept Header for User Agent Requests
- Custom Controller Class with Resource Annotation
- Change Response Formats in RestfulController
- Register Custom Marshaller Using ObjectMarshallerRegisterer
- Using Converter Named Configurations with Default Renderers
- Rendering Partial RESTful Responses
- Customize Root Element Name Collections for XML Marshalling
The Service Layer
- Generate Links Outside Controllers or Tag Libraries
- Render GSP Views And Templates Outside Controllers
- Accessing Resources with Resource and ResourceLocator
Grails and Spring
- Injecting Grails Services into Spring Beans
- Conditionally Load Bean Definitions from resources.groovy
- Using Spring Bean Aliases
- Use Constructor Argument Based Dependency Injection
- Set Property Values of Spring Beans in resources.groovy
- Setting Property Values through Configuration
- Defining Spring Beans With doWithSpring Method
- Use Spring Java Configuration
- Conditionally Load Beans in Java Configuration Based on Grails Environment
- Don’t Invalidate Session After Logout with Spring Security Plugin
Testing
- See Test Output on the Command Line
- Invoking a Single Test Method
- Cleaning Before Running Tests
- Rerun the Latest Failed Test
- Running Tests Continuously
- Testing for Chain Result in Controller
- Checking Results from Forward Action in Controller Unit Tests
- Using Codecs in Test Classes
- Unit Testing Render Templates from Controller
- Testing Views and Templates
- Passing Objects to Attributes of Tags in Unit Tests
- Set Request Locale in Unit Tests
- Using MetaClass with Testing
- Mocking the Configuration in Unit Tests
- Use Random Server Port In Integration Tests
Internationalization (i18n)
- Define Date Format in i18n ResourceBundle
- Splitting i18n Message Bundles
- Change Locale With Request Parameter
- Internationalize Javascript Messages with JAWR Plugin
IDE
- Quickly Create GSP From Controller In IntelliJ IDEA
- Go To Related Classes In IntelliJ IDEA
- Debugging App in Forked Mode
- Run Forked Tests in IntelliJ IDEA
Miscellaneous
- Creating A Runnable Distribution
- Creating A Fully Executable Jar
- Run Grails Application As Docker Container
Converted Files
- 20161019-grails-goodness-skip-bootstrap-code
- 20161118-grails-goodness-notebook-is-updated
- 20161123-gails-goodness-enabling-grails-view-in
- 20161209-grails-goodness-writing-log-messages
- 20170221-grails-goodness-using-domain-classes
- 20170227-grails-goodness-custom-json-and-markup