2010-07-30 35 views
37

Tôi nhận được những tin nhắn này:Hạt sao lưu JSF có thể được tuần tự hóa?

[# | 2010-07-30T11: 28: 32,723 + 0000 | CẢNH BÁO | glassfish3.0.1 | javax.faces | _ThreadID = 37; _ThreadName = Thread-1; | Thiết giá trị thuộc tính không serializable vào ViewMap: (key: MyBackingBean, giá trị lớp: foo.bar.org.jsf.MyBackingBean) | #]

làm này có ý nghĩa rằng đậu JSF ủng hộ tôi nên triển khai Serializable? Hay họ đang đề cập đến một số vấn đề khác?

Trả lời

58

Có, bạn đã hiểu chính xác. Quan điểm về cơ bản được lưu trữ trong phạm vi phiên. Phạm vi phiên là trong JSF được hỗ trợ bởi số HttpSession của Servlet. Tất cả các thuộc tính phiên được yêu cầu triển khai Serializable, điều này bởi vì servletcontainer trung bình có thể duy trì dữ liệu phiên để harddisk trong số những người khác có thể chia sẻ với các máy chủ khác trong cụm hoặc để tồn tại tải nặng hoặc hồi sinh phiên trong khi khởi động lại máy chủ.

Lưu trữ các đối tượng Java thô trên đĩa cứng chỉ có thể thực hiện được nếu lớp tương ứng triển khai Serializable. Sau đó, ObjectOutputStream có thể được sử dụng để ghi chúng vào đĩa cứng và ObjectInputStream để đọc chúng từ đĩa cứng. Servletcontainer quản lý điều này một cách minh bạch, bạn thực sự không cần phải lo lắng về nó. JSF chỉ đưa ra một cảnh báo để bạn hiểu những rủi ro.

+0

Đậu của tôi hầu hết được xem là phạm vi. Chúng có còn tồn tại khi phiên được duy trì không? – egbokul

+3

Như đã nói, chế độ xem được lưu trữ trong phiên. – BalusC

+0

Xin lỗi, đọc lại câu trả lời của bạn ;-) – egbokul

0

Đậu sử dụng phiên, ứng dụng hoặc phạm vi cuộc trò chuyện phải được nối tiếp, nhưng các hạt sử dụng phạm vi yêu cầu không phải nối tiếp. Nguồn: https://docs.oracle.com/javaee/6/tutorial/doc/gjbbk.html

+0

Lưu ý quan trọng: Phần đó là về các bean được quản lý CDI, không phải các bean được JSF quản lý. – BalusC

+1

Bạn có thể vui lòng xây dựng thêm câu trả lời của bạn thêm mô tả chi tiết hơn về giải pháp bạn cung cấp không? – abarisone

-2

Vâng, Đậu Sao lưu/Đậu Managed về cơ bản có nghĩa là để kéo dài tình trạng quan điểm, vì vậy nó cần được thực hiện tuần tự, nhưng UI Components có thể không cho phép nó để serializable và JSF Runitime sẽ cho bạn thấy errror/tin nhắn cảnh báo. một điều bạn có thể làm là đánh dấu thành phần tạm thời đó trong MBeans của bạn.

Cảm ơn.

+1

Điều này không áp dụng cho các yêu cầu hoặc các ứng dụng được quản lý bởi JSF. Đối với các thành phần giao diện người dùng, bạn chỉ cần không bao giờ gán một thành phần giao diện người dùng như là một biến mẫu của một bean được quản lý trong phạm vi rộng hơn phạm vi yêu cầu. Làm như vậy chỉ đơn giản là thiết kế xấu. Xem thêm a.o. http://stackoverflow.com/questions/14911158/ – BalusC

Các vấn đề liên quan