I'm trying to implement a filter that should be called in certain instances before going to a GSP page. As the URL does not differ a lot between the instances where I want it to happen, and those where I don't, I thought the best way to do this would be to create a method that does nothing (with a print statement inside) - but can simply be called when I want the filter action to take place.
I have tried this as both:
def hello(){
print "hello"
}
and
def hello = {
print "hello"
}
calling these simply by adding
hello()
at the relevant point
The start of my filter is as follows:
import uui.FormattingService
class TimeFormatterFilters {
def FormattingService formattingService
def filters = {
someFilter(controller: 'userProfile', action: 'hello') {
before = {
print "filter action taking place"
I do not see the print statement from within the filter for either of the newly made methods within the UserProfileController, yet if I swap the action for the filter to 'index', I see the print within the filter being called.
The problem you are facing is that you are calling the
hello()action directly from another action within your controller. This is just a normal method call and does not pass through the filter.Grails filters are called when an HTTP client requests a specific URI e.g.
http://localhost:8080/my-app/myController/myActionwill matchmyControllerandmyAction.If you simply call
myAction()from within the controller when responding to a different URI the filter won't be used. Which is what you are doing.