Фильтры ======= Пре-фильтр (before filter) -------------------------- Если пре-фильтр отправляет ответ сервера (вызывает respond или forwardTo), то все остальные фильтры и сам контроллер не будет запущен. :: import xitrum.Action import xitrum.annotation.GET @GET("before_filter") class MyAction extends Action { beforeFilter { log.info("I run therefore I am") } // метод выполнится после всех фильтров def execute() { respondInlineView("Пре-фильтр должны быть выполнен, проверьте лог") } } Пост-фильтры (after filter) -------------------------- Пост-фильтры запускаются после выполнения контроллера. Они не принимают аргументов и не возвращают значений. :: import xitrum.Action import xitrum.annotation.GET @GET("after_filter") class MyAction extends Action { afterFilter { log.info("Время запуска " + System.currentTimeMillis()) } def execute() { respondText("Пост-фильтр должен будет запустится, проверьте лог") } } Внешние фильтры (around filter) ------------------------------- :: import xitrum.Action import xitrum.annotation.GET @GET("around_filter") class MyAction extends Action { aroundFilter { action => val begin = System.currentTimeMillis() action() val end = System.currentTimeMillis() val dt = end - begin log.info(s"Контролер выполнялся $dt [ms]") } def execute() { respondText("Внешний фильтр должен выполниться, проверьте лог") } } Если внешних фильтров будет несколько, они будут вложены друг в друга. Порядок выполнения фильтров --------------------------- * Вначале выполняются пре-фильтры, затем внешние фильтры, и последними выполняются пост-фильтры. * Если пре-фильтр возвращает false, остальные фильтры (включая внешние и пост-фильтры) не будут запущены. * Пост-фильтры выполняются, в том числе, если хотя бы один из внешних фильтров выполнился. * Если внешний фильтр не вызывает ``action``, вложенные внешние фильтры не будут выполнены. :: before1 -true-> before2 -true-> +--------------------+ --> after1 --> after2 | around1 (1 of 2) | | around2 (1 of 2) | | action | | around2 (2 of 2) | | around1 (2 of 2) | +--------------------+