0 added
0 removed
Original
2026-01-01
Modified
2026-02-26
1
<p>Работая на Хекслете, вы не раз видели сообщение о результатах выполнения любого действия - будь то аутентификация, регистрация или вступление в курс. Выглядят эти сообщения так:</p>
1
<p>Работая на Хекслете, вы не раз видели сообщение о результатах выполнения любого действия - будь то аутентификация, регистрация или вступление в курс. Выглядят эти сообщения так:</p>
2
<p>В веб-разработке это называется<strong>флеш-сообщениями</strong>. Они обычно используются после редиректа для индикации успешности или неудачи предыдущего действия. Например, после регистрации сайт выполняет перенаправление на страницу, с которой пришел пользователь, а затем выводит сообщение "Регистрация выполнена".</p>
2
<p>В веб-разработке это называется<strong>флеш-сообщениями</strong>. Они обычно используются после редиректа для индикации успешности или неудачи предыдущего действия. Например, после регистрации сайт выполняет перенаправление на страницу, с которой пришел пользователь, а затем выводит сообщение "Регистрация выполнена".</p>
3
<p>Особенность флеш-сообщений в том, что они появляются только один раз и пропадают после обновления страницы.</p>
3
<p>Особенность флеш-сообщений в том, что они появляются только один раз и пропадают после обновления страницы.</p>
4
<p>Иногда фреймворки поддерживают флеш-сообщения самостоятельно или с помощью соответствующих дополнений. В случае Java-фреймворков таких решений нет, но их легко имитировать с помощью механизма сессий. В Javalin нам для этого понадобится два метода:</p>
4
<p>Иногда фреймворки поддерживают флеш-сообщения самостоятельно или с помощью соответствующих дополнений. В случае Java-фреймворков таких решений нет, но их легко имитировать с помощью механизма сессий. В Javalin нам для этого понадобится два метода:</p>
5
<p>Метод consumeSessionAttribute() идеально подходит для реализации сессии. Он читает сообщение из сессии и удаляет его, что автоматически прячет сообщение при обновлении страницы или клику по любой ссылке.</p>
5
<p>Метод consumeSessionAttribute() идеально подходит для реализации сессии. Он читает сообщение из сессии и удаляет его, что автоматически прячет сообщение при обновлении страницы или клику по любой ссылке.</p>
6
<p>Добавим флеш-сообщение в процесс создания курса. Для этого нам понадобится установить сообщение, которое будет выводиться после успешного создания курса:</p>
6
<p>Добавим флеш-сообщение в процесс создания курса. Для этого нам понадобится установить сообщение, которое будет выводиться после успешного создания курса:</p>
7
<p>Сразу после установки сообщения выполняется редирект и загрузка какой-то другой страницы - в нашем случае это список курсов. Это означает, что вывод сообщения должен происходить на этом списке. Для этого нам понадобится извлечь сообщение из сессии, передать его в шаблон и вывести:</p>
7
<p>Сразу после установки сообщения выполняется редирект и загрузка какой-то другой страницы - в нашем случае это список курсов. Это означает, что вывод сообщения должен происходить на этом списке. Для этого нам понадобится извлечь сообщение из сессии, передать его в шаблон и вывести:</p>
8
<p>Метод ctx.consumeSessionAttribute() извлекает данные по указанному ключу и удаляет их. Это важно, потому что повторная загрузка страницы приведет к пропаданию флеш-сообщения. Дальше сообщение передается в CoursePage. Осталось сделать вывод в шаблоне:</p>
8
<p>Метод ctx.consumeSessionAttribute() извлекает данные по указанному ключу и удаляет их. Это важно, потому что повторная загрузка страницы приведет к пропаданию флеш-сообщения. Дальше сообщение передается в CoursePage. Осталось сделать вывод в шаблоне:</p>
9
<h2>Использование макета</h2>
9
<h2>Использование макета</h2>
10
<p>Логика вывода флеш-сообщений идентична для всех страниц сайта, поэтому перенесем их вывод в макет. Но как их передать туда с учетом, что такие сообщения передаются в шаблон в разных Page объектах?</p>
10
<p>Логика вывода флеш-сообщений идентична для всех страниц сайта, поэтому перенесем их вывод в макет. Но как их передать туда с учетом, что такие сообщения передаются в шаблон в разных Page объектах?</p>
11
<p>Самый простой способ - это создание базового класса для всех Page, в котором сосредоточится логика работы с флеш-сообщениями:</p>
11
<p>Самый простой способ - это создание базового класса для всех Page, в котором сосредоточится логика работы с флеш-сообщениями:</p>
12
<p>Класс CoursesPage при этом будет наследоваться от базового класса Page</p>
12
<p>Класс CoursesPage при этом будет наследоваться от базового класса Page</p>
13
<p>Теперь в нужном месте мы можем добавлять сообщения так:</p>
13
<p>Теперь в нужном месте мы можем добавлять сообщения так:</p>
14
<p>Затем мы должны передать этот page в макет в шаблоне этого обработчика:</p>
14
<p>Затем мы должны передать этот page в макет в шаблоне этого обработчика:</p>
15
<p>И наконец вывод в макете:</p>
15
<p>И наконец вывод в макете:</p>
16
16