Вы могли, вероятно, взломать что-то вместе путем обнаружения движения мыши на теле формы и обновления глобальной переменной с прошлым разом перемещения. У Вас должен был бы тогда быть таймер интервала, работающий, который периодически проверяет в прошлый раз перемещения и делает что-то, если это было достаточно давно последнее движение мыши, был обнаружен.
Кажется, нет простого способа сделать это, но это не так уж и много. Мое решение подклассирует сервлет, который отображает GSP (а также контроллер, который используется для запросов, отличных от GSP).
Вот подкласс сервлета:
package com.burtbeckwith;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.codehaus.groovy.grails.web.pages.GroovyPagesServlet;
public class CachingPageServlet extends GroovyPagesServlet {
private static final String HEADER_PRAGMA = "Pragma";
private static final String HEADER_EXPIRES = "Expires";
private static final String HEADER_CACHE_CONTROL = "Cache-Control";
@Override
public void doPage(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setHeader(HEADER_PRAGMA, "no-cache");
response.setDateHeader(HEADER_EXPIRES, 1L);
response.setHeader(HEADER_CACHE_CONTROL, "no-cache");
response.addHeader(HEADER_CACHE_CONTROL, "no-store");
super.doPage(request, response);
}
}
, и вам нужно будет заменить оригинал в web.xml (запустите «grails install-templates "и отредактируйте src / templates / war / web.xml):
<servlet>
<servlet-name>gsp</servlet-name>
<servlet-class>com.burtbeckwith.CachingPageServlet</servlet-class>
</servlet>
, и вы, вероятно, также захотите сделать то же самое для ответов на основе контроллера, поэтому для этого используйте этот подкласс контроллера:
package com.burtbeckwith;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.codehaus.groovy.grails.web.servlet.mvc.SimpleGrailsController;
import org.springframework.web.servlet.ModelAndView;
public class CachingSimpleGrailsController extends SimpleGrailsController {
private static final String HEADER_PRAGMA = "Pragma";
private static final String HEADER_EXPIRES = "Expires";
private static final String HEADER_CACHE_CONTROL = "Cache-Control";
@Override
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
response.setHeader(HEADER_PRAGMA, "no-cache");
response.setDateHeader(HEADER_EXPIRES, 1L);
response.setHeader(HEADER_CACHE_CONTROL, "no-cache");
response.addHeader(HEADER_CACHE_CONTROL, "no-store");
return super.handleRequest(request, response);
}
}
и вам нужно будет зарегистрировать его в grails-app / conf / spring / resources.groovy, чтобы переопределить обычный компонент Spring:
mainSimpleController(com.burtbeckwith.CachingSimpleGrailsController) {
grailsApplication = ref('grailsApplication', true)
}
Код настройки общего заголовка, вероятно, следует извлечь в служебный класс вместо того, чтобы копировать / вставлять, как Я сделал здесь.
Убедитесь, что вы работаете в режиме разработки (т. Е. Grails run-app, а не grails test | prod run-app, test и production включат кеширование страниц. Если вы находитесь в dev режима, попробуйте удерживать клавишу Shift при нажатии кнопки обновления Firefox.
Если вы просто хотите отключить кеш для своего браузера во время разработки, вы можете использовать надстройку Web Developer для Firefox:
https://addons.mozilla.org/en-US/ firefox / addon / 60
Установите это дополнение и выберите «Отключить кеш». Помните, что это отключит кеширование для всех веб-сайтов.