Задать вопрос
@My1Name

Как отклонить запрос пользователя до завершения операции?

На странице расположен обычный слайдер (bootstrap) с функциями редактирования и отправки файлов через ajax.65b001ac121b2948495066.jpeg
Нажимая на кнопку "Ок!" вызывается прозрачный слой (backdrop) перекрывающий весь контент и отображается надпись "loading...". В это время файлы сохраняются и всё нормально работает. Однако, если убрать прозрачный слой и пользователь будет тыкать "Ок!", получается не хорошая ситуация: Одинаковые файлы могут записаться несколько раз, если по первому клику процесс сохранения не завершён.

Вопрос: Как приостановить получение запросов от пользователя до завершения операции?
@PostMapping("/slider")
public @ResponseBody int saveImages (HttpServletRequest req, 
@RequestParam("image") List<MultipartFile> images, 
Principal principal) throws IOException{
		if(principal==null)
			return 406; // Not Acceptable
		if(images!=null && !images.isEmpty()) {
			String path = service.getPathByPrincipal(principal);
			boolean r1 = req.getParameter("r-1")==null? false : true;
			boolean r2 = req.getParameter("r-2")==null? false : true;
			boolean r3 = req.getParameter("r-3")==null? false : true;
			boolean r4 = req.getParameter("r-4")==null? false : true;
			boolean [] remove = {r1,r2,r3,r4};
			if (r1 && r2 && r3 && r4)
				TOOLS.removeSlide(path, -1); // удалить все
			else 
				for (byte x=0; x<4; x++)
					if (remove[x])
				TOOLS.removeSlide(path, x+1); // удалить 1 по номеру
			String imgName, absolutePath;
			for(byte i=0; i<images.size();i++) {
				imgName = images.get(i).getOriginalFilename().toLowerCase();
				imgName = setCorrectName(imgName, i);
				if (imgName!=null) {
					if (remove[i]==false)
						TOOLS.removeSlide(path, i+1); // удалить 1 по номеру 
					absolutePath = TOOLS.createUMediaPackage(path);
					Path fullPath = Paths.get(absolutePath, imgName);
					InputStream in = images.get(i).getInputStream();
					BufferedImage image = ImageIO.read(in);
					absolutePath = fullPath.toString();
					TOOLS.writeOptimizedImage(absolutePath, image);
					in.close();
				}
			}
		}
		else
			return 412; // Bad request
	return 200;

r1, r2, r3 и r4 - это скрытые чекбоксы на странице html, которые отвечают за удаление слайдов по нажатию на "корзину".
  • Вопрос задан
  • 144 просмотра
Подписаться 1 Средний 20 комментариев
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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