Учебники

Apache Tapestry — Хранение

Каждое веб-приложение должно иметь некоторый способ хранения определенных пользовательских данных, таких как объект пользователя, пользовательские предпочтения и т. Д. Например, в приложении корзины покупок выбранные пользователем товары / товары должны сохраняться во временном контейнере (корзине) до тех пор, пока пользователь не отдает предпочтение купить продукты. Мы можем сохранить элементы в базе данных, но это будет слишком дорого, поскольку все пользователи не собираются покупать выбранные элементы. Итак, нам нужно временное устройство для хранения / сохранения предметов. Apache Tapestry Предоставляет два способа сохранения данных, и они —

  • Данные персистентной страницы
  • Хранение сессий

У обоих есть свои преимущества и недостатки. Мы проверим это в следующих разделах.

Данные персистентной страницы

Данные персистентности страницы — это простая концепция для сохранения данных на одной странице между запросами, которая также называется персистентностью на уровне страницы . Это можно сделать с помощью аннотации @Persist .

@Persist 
public int age; 

Как только поле аннотируется @Persist, значение поля будет сохраняться в запросе, и если значение будет изменено во время запроса, оно будет отражено при следующем обращении к нему. Apache Tapestry предлагает пять типов стратегий для реализации концепции @Persist. Они заключаются в следующем —

  • Стратегия сеанса — данные сохраняются с использованием сеанса, и это стратегия по умолчанию.

  • Стратегия Flash — данные также сохраняются с использованием Session, но они очень недолговечны. Данные будут доступны только в одном последующем запросе.

Стратегия сеанса — данные сохраняются с использованием сеанса, и это стратегия по умолчанию.

Стратегия Flash — данные также сохраняются с использованием Session, но они очень недолговечны. Данные будут доступны только в одном последующем запросе.

@Persist(PersistenceConstants.FLASH) 
private int age;
  • Стратегия клиента — данные сохраняются на стороне клиента, такие как строка запроса URL, скрытое поле в форме и т. Д.

Стратегия клиента — данные сохраняются на стороне клиента, такие как строка запроса URL, скрытое поле в форме и т. Д.

@Persist(PersistenceConstants.FLASH) 
private int age; 
  • Стратегия Hibernate Entity — данные сохраняются с использованием модуля Hibernate в качестве Entity. Сущность будет сохранена в Hibernate, а ее ссылка (имя класса Java и его первичный ключ) будет сохранена как токен в HttpSession . Объект будет восстановлен с использованием токена, доступного в HttpSession.

Стратегия Hibernate Entity — данные сохраняются с использованием модуля Hibernate в качестве Entity. Сущность будет сохранена в Hibernate, а ее ссылка (имя класса Java и его первичный ключ) будет сохранена как токен в HttpSession . Объект будет восстановлен с использованием токена, доступного в HttpSession.

@Persist(HibernatePersistenceConstants.ENTITY) 
private Category category;
  • Стратегия сущности JPA — данные сохраняются с использованием модуля JPA. Он сможет хранить только Entity.

Стратегия сущности JPA — данные сохраняются с использованием модуля JPA. Он сможет хранить только Entity.

@Persist(JpaPersistenceConstants.ENTITY) 
private User user; 

Хранение сессий

Хранилище сеансов — это продвинутая концепция, используемая для хранения данных, которые должны быть доступны на разных страницах, таких как данные в мастере многостраничных данных, информация о пользователе и т. Д. Хранилище сеансов предоставляет два варианта: один для хранения сложного объекта, а другой для хранения простых значений

  • Session Store Object — Используется для хранения сложного объекта.

  • Атрибуты сеанса — используются для хранения простых значений.

Session Store Object — Используется для хранения сложного объекта.

Атрибуты сеанса — используются для хранения простых значений.

Объект хранилища сеансов (SSO)

Единый вход может быть создан с помощью аннотации @SessionStore . SSO будет хранить объект, используя тип объекта. Например, объект Cart будет сохранен с использованием имени класса Cart в качестве токена. Таким образом, любой сложный объект может быть сохранен в приложении один раз (по одному на пользователя).

public class MySSOPage { 
   @SessionState 
   private ShoppingCart cart; 
}

SSO — это специализированное хранилище, и его следует использовать для хранения только сложных / специальных объектов. Простые типы данных также могут храниться с использованием единого входа, но хранение простых типов данных, таких как String, позволяет хранить в приложении только одно значение «String». Использование одного значения «String» в приложении просто невозможно. Вы можете использовать простые типы данных, так как Apache Tapestry предоставляет атрибуты сеанса.

Атрибуты сеанса

Атрибуты сеанса позволяют хранить данные по имени, а не по типу.

public class MyPage { 
   @SessionAttribute  
   private String loggedInUsername; 
}

По умолчанию атрибуты сеанса используют имя поля для ссылки на данные в сеансе. Мы можем изменить имя ссылки по параметру аннотации, как показано ниже —

public class MyPage { 
   @SessionAttribute("loggedInUserName") 
   private String userName; 
}

Одна из основных проблем использования имени в качестве ссылки на сессию заключается в том, что мы можем случайно использовать одно и то же имя в нескольких классах / страницах. В этом случае сохраненные данные могут быть неожиданно изменены. Чтобы решить эту проблему, будет лучше использовать имя вместе с именем класса / страницы и именем пакета, например com.myapp.pages.register.email , где com.myapp.pages — это имя пакета, register — это страница / класс. имя и, наконец, адрес электронной почты является переменной (для хранения) имя.