Apache Tapestry - Bộ nhớ
Mỗi ứng dụng web nên có một số cách để lưu trữ dữ liệu người dùng nhất định như đối tượng người dùng, sở thích của người dùng, v.v. Ví dụ: trong ứng dụng giỏ hàng, các mặt hàng / sản phẩm đã chọn của người dùng phải được lưu trong một nhóm tạm thời (giỏ hàng) cho đến khi người dùng thích để mua các sản phẩm. Chúng ta có thể lưu các mặt hàng trong cơ sở dữ liệu, nhưng sẽ quá đắt vì tất cả người dùng sẽ không mua các mặt hàng đã chọn. Vì vậy, chúng tôi cần một sự sắp xếp tạm thời để lưu trữ / tồn tại các mục. Apache Tapestry Cung cấp hai cách để duy trì dữ liệu và chúng -
- Dữ liệu trang ổn định
- Lưu trữ phiên
Cả hai đều có những ưu điểm và hạn chế riêng. Chúng tôi sẽ kiểm tra nó trong các phần sau.
Dữ liệu trang ổn định
Dữ liệu trang ổn định là một khái niệm đơn giản để duy trì dữ liệu trong một trang duy nhất giữa các yêu cầu và nó còn được gọi là Page Level Persistence. Nó có thể được thực hiện bằng cách sử dụng@Persist chú thích.
@Persist
public int age;
Khi một trường được chú thích bằng @Persist, giá trị của trường sẽ được duy trì theo yêu cầu và nếu giá trị được thay đổi trong khi yêu cầu, giá trị đó sẽ được phản ánh khi được truy cập vào lần tiếp theo. Apache Tapestry cung cấp năm loại chiến lược để thực hiện khái niệm @Persist. Chúng như sau:
Session Strategy - Dữ liệu được duy trì bằng cách sử dụng Phiên và đó là chiến lược mặc định.
Flash Strategy- Dữ liệu vẫn tồn tại bằng Session, nhưng nó chỉ tồn tại trong thời gian rất ngắn. Dữ liệu sẽ chỉ có sẵn trong một lần yêu cầu tiếp theo.
@Persist(PersistenceConstants.FLASH)
private int age;
Client Strategy - Dữ liệu được lưu giữ ở phía máy khách như chuỗi truy vấn URL, trường ẩn trong biểu mẫu, v.v.
@Persist(PersistenceConstants.FLASH)
private int age;
Hibernate Entity Strategy- Dữ liệu được duy trì bằng cách sử dụng mô-đun Hibernate làm Thực thể. Thực thể sẽ được lưu trữ trong Hibernate và tham chiếu của nó (tên lớp Java và khóa chính của nó) sẽ được lưu dưới dạng mã thông báo trongHttpSession. Thực thể sẽ được khôi phục bằng cách sử dụng mã thông báo có sẵn trong HttpSession.
@Persist(HibernatePersistenceConstants.ENTITY)
private Category category;
JPA Entity Strategy- Dữ liệu được duy trì bằng cách sử dụng mô-đun JPA. Nó sẽ chỉ có thể lưu trữ Thực thể.
@Persist(JpaPersistenceConstants.ENTITY)
private User user;
Lưu trữ phiên
Lưu trữ phiên là một khái niệm nâng cao được sử dụng để lưu trữ dữ liệu cần có sẵn trên các trang như dữ liệu trong trình hướng dẫn nhiều trang, chi tiết người dùng đã đăng nhập, v.v. Lưu trữ phiên cung cấp hai tùy chọn, một để lưu trữ đối tượng phức tạp và một để lưu trữ các giá trị đơn giản
Session Store Object - Dùng để lưu trữ các đối tượng phức tạp.
Session Attributes - Dùng để lưu các giá trị đơn giản.
Đối tượng lưu trữ phiên (SSO)
Một SSO có thể được tạo bằng cách sử dụng @SessionStorechú thích. SSO sẽ lưu trữ đối tượng bằng cách sử dụng loại đối tượng. Ví dụ,Cart Objectsẽ được lưu trữ bằng cách sử dụng tên lớp Cart làm mã thông báo. Vì vậy, bất kỳ đối tượng phức tạp nào cũng có thể được lưu trữ một lần trong một ứng dụng (một đối tượng cho mỗi người dùng).
public class MySSOPage {
@SessionState
private ShoppingCart cart;
}
SSO là một cửa hàng chuyên dụng và chỉ nên được sử dụng để lưu trữ đối tượng phức tạp / đặc biệt. Các kiểu dữ liệu đơn giản cũng có thể được lưu trữ bằng SSO, nhưng việc lưu trữ các kiểu dữ liệu đơn giản như Chuỗi khiến nó chỉ lưu trữ một giá trị “Chuỗi” trong ứng dụng. Chỉ đơn giản là không thể sử dụng một giá trị “Chuỗi” trong ứng dụng. Bạn có thể sử dụng các kiểu dữ liệu đơn giản vì Apache Tapestry cung cấp Thuộc tính phiên.
Thuộc tính phiên
Thuộc tính phiên cho phép dữ liệu được lưu trữ theo tên thay vì loại của nó.
public class MyPage {
@SessionAttribute
private String loggedInUsername;
}
Theo mặc định, Thuộc tính phiên sử dụng tên trường để tham chiếu dữ liệu trong phiên. Chúng ta có thể thay đổi tên tham chiếu bằng tham số chú thích như hình dưới đây -
public class MyPage {
@SessionAttribute("loggedInUserName")
private String userName;
}
Một trong những vấn đề chính trong việc sử dụng tên làm tham chiếu phiên là chúng ta có thể vô tình sử dụng cùng một tên trong nhiều lớp / trang. Trong trường hợp này, dữ liệu được lưu trữ có thể thay đổi bất ngờ. Để khắc phục sự cố này, sẽ tốt hơn nếu sử dụng tên cùng với tên lớp / trang và tên gói nhưcom.myapp.pages.register.email, trong đó com.myapp.pages là tên gói, register là tên trang / lớp và cuối cùng email là tên biến (sẽ được lưu trữ).