Как стать автором
Обновить

Stateless и Statefull страницы в Wicket 1.4

Время на прочтение2 мин
Количество просмотров6.7K
Для начала немного уточним о чем идет речь. Wicket хранит последнюю просмотренную страницу в сессии, но в случае если страница очень большая, иногда это может стать проблемой. Для того что бы избежать этих проблем, можно попытаться сделать страницу Stateless(т.е. не имеющую состояния).
Итак, Stateless page — это страница не имеющая состояния, Statefull page — это страница с состоянием.

Stateless страницы не хранят никакого состояния из-за чего нет необходимости сохранять их от запроса к запросу.
Такие страницы не сохраняются ни в сессии ни в истории посещённых страниц хранящейся на диске, таким страницам не присваивается версия, как это происходит со statefull страницами. При каждом запросе к такой странице, её экземпляр создаётся заново.

Для того что бы страница стала stateless необходимо выполнить два условия:
  • В первую очередь страница должна быть bookmarkable.
  • Страница должна использовать только stateless компоненты.

При выполнении этих условий, такая страница автоматически становится stateless. Но если на странице используется хотя бы один компонент, который не является stateless, то вся страница становится statefull, и полностью сереализуется и сохраняется в сессии, и далее в истории на диске.

Рассмотрим подробнее эти два условия:

Bookmarkable страница означает, что этой странице можно самостоятельно назначить URL, и этот URL не содержит ни какой информации связанной с сессией(к примеру версии страницы), и
её можно открыть непосредственно набрав адрес в браузере, даже если сессия ещё не начата.
Для того, что бы страница была Bookmarkable, она должна иметь конструктор не принимающий параметров или конструктор принимающий единственный параметр класса PageParameter.
В случае если страница создаётся с помощью конструктора не удовлетворяющего этим условиям, страница не будет Bookmarkable.
Если страница не является Bookmarkable, то к ней можно получить доступ только создав её из другой страницы.

Является компонент stateless или statefull определяется с помощью метода getStatelessHint(), который возвращает true если компонент stateless и false если нет.

К stateless относятся следующие компоненты:

  • Label, MultiLineLabel, EnumLabel
  • Panel, Border, BoxBorder, Include, TabbedPanel, FeedbackPanel
  • BookmarkablePageLink, ExternalLink, ImageMap, StatelessLink
  • StatelessForm
  • Button, SubmitLink
  • TextField, PasswordTextField, TextArea, HiddenField, RequiredTextField, DateTextField
  • CheckBoxMultipleChoice, CheckGroupSelector
  • ListMultipleChoice
  • Select, SelectOption, SelectOptions
  • Palette
  • DataGridView, DataTable, Tree, TreeTable,
  • ListItem, ListView, Loop, PageableListView, PropertyListView
  • PagingNavigation, PagingNavigator
  • BaseTree, LabelTree, LinkTree

К statefull относятся следующие компоненты:
  • Link, ResourceLink
  • Form
  • CheckBox, CheckGroup, Check
  • DropDownChoice, ListChoice
  • Radio, RadioChoice, RadioGroup
  • ImageButton
  • PagingNavigationIncrementLink, PagingNavigationLink
  • AJAX компоненты (существует библиотека, с некоторыми stateless AJAX компонентами github.com/jolira/wicket-stateless)


Важно: Link и Form являются statefull. Для использования этих компонентов в stateless страницах предназначены StatelessLink и StatelessForm.

Источники:

cwiki.apache.org/WICKET/stateless-pages.html
cwiki.apache.org/WICKET/pages.html
cwiki.apache.org/WICKET/bookmarkable-pages-and-links.html
wicket.apache.org/apidocs/1.4
www.wicket-library.com/wicket-examples/compref
Теги:
Хабы:
Всего голосов 5: ↑3 и ↓2+1
Комментарии9

Публикации

Истории

Работа

Java разработчик
213 вакансий

Ближайшие события

19 марта – 28 апреля
Экспедиция «Рэйдикс»
Нижний НовгородЕкатеринбургНовосибирскВладивостокИжевскКазаньТюменьУфаИркутскЧелябинскСамараХабаровскКрасноярскОмск
24 апреля
VK Go Meetup 2025
Санкт-ПетербургОнлайн
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань
14 мая
LinkMeetup
Москва
5 июня
Конференция TechRec AI&HR 2025
МоскваОнлайн
20 – 22 июня
Летняя айти-тусовка Summer Merge
Ульяновская область