HTML Diff
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