Как препятствовать тому, чтобы Grails кэшировал старые версии gsp файла?

Вы могли, вероятно, взломать что-то вместе путем обнаружения движения мыши на теле формы и обновления глобальной переменной с прошлым разом перемещения. У Вас должен был бы тогда быть таймер интервала, работающий, который периодически проверяет в прошлый раз перемещения и делает что-то, если это было достаточно давно последнее движение мыши, был обнаружен.

12
задан Emmett 30 August 2009 в 05:29
поделиться

3 ответа

Кажется, нет простого способа сделать это, но это не так уж и много. Мое решение подклассирует сервлет, который отображает 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)
}

Код настройки общего заголовка, вероятно, следует извлечь в служебный класс вместо того, чтобы копировать / вставлять, как Я сделал здесь.

8
ответ дан 2 December 2019 в 05:28
поделиться

Убедитесь, что вы работаете в режиме разработки (т. Е. Grails run-app, а не grails test | prod run-app, test и production включат кеширование страниц. Если вы находитесь в dev режима, попробуйте удерживать клавишу Shift при нажатии кнопки обновления Firefox.

2
ответ дан 2 December 2019 в 05:28
поделиться

Если вы просто хотите отключить кеш для своего браузера во время разработки, вы можете использовать надстройку Web Developer для Firefox:

https://addons.mozilla.org/en-US/ firefox / addon / 60

Установите это дополнение и выберите «Отключить кеш». Помните, что это отключит кеширование для всех веб-сайтов.

1
ответ дан 2 December 2019 в 05:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: