2010-05-26 32 views
24

Trong JSF, có một chế độ xem liên kết với mỗi trang, được chuyển qua lại với các lần gửi, v.v.ViewState trong JSF là gì và nó được sử dụng như thế nào?

Tôi biết rằng chế độ xem được tính bằng cách sử dụng các điều khiển khác nhau trên trang và bạn có thể lưu trữ phía máy khách hoặc phía máy chủ.

Câu hỏi đặt ra là: giá trị này được sử dụng như thế nào? Có phải nó được sử dụng để xác thực các giá trị được gửi khi gửi, để đảm bảo rằng cùng một yêu cầu không được gửi hai lần?

Ngoài ra, tính toán như thế nào - Tôi nhận ra rằng các richfaces có thể được tính toán khác với myfaces, nhưng ý tưởng sẽ tốt đẹp.

Cảm ơn.

+0

Hiện tại có một số tranh luận về trạng thái xem trong cộng đồng JSF. Xem báo cáo lỗi này: http: // java.net/jira/browse/JAVASERVERFACES_SPEC_PUBLIC-1055 –

Trả lời

24

Câu hỏi đặt ra là: giá trị này được sử dụng như thế nào ? Có phải nó được sử dụng để xác nhận các giá trị được gửi khi gửi, để đảm bảo rằng cùng một yêu cầu không được gửi hai lần?

Lý do ban đầu tại sao ViewState tồn tại là do HTTP là trạng thái vô quốc tịch. Trạng thái của các thành phần trên các yêu cầu cần được duy trì theo cách này hay cách khác. Hoặc bạn lưu trữ trạng thái trong bộ nhớ trên máy chủ và liên kết nó với phiên, hoặc tuần tự hóa/deserialize nó trong yêu cầu/đáp ứng mỗi lần.

AFAIK, chế độ xem không được sử dụng để phát hiện gửi kép, nhưng có thể nếu bạn đính kèm dấu thời gian hoặc thứ gì đó tương tự.

Viewstate cũng có thể được mã hóa để đảm bảo ứng dụng khách không thay đổi.

Ngoài ra, được tính như thế - Tôi nhận ra rằng richfaces có thể được tính khác so với MyFaces, nhưng một ý tưởng sẽ được tốt đẹp.

Mỗi thành phần chịu trách nhiệm duy trì trạng thái của nó với saveStaterestoreState (xem số tutorial) này. Vì vậy, các bộ thành phần khác nhau dẫn đến trạng thái chế độ xem khác nhau. Tương tự, các triển khai JSF khác nhau có thể dẫn đến trạng thái xem khác nhau.

+0

"Hoặc bạn lưu trữ trạng thái trong bộ nhớ trên máy chủ và liên kết nó với phiên, hoặc tuần tự hóa/deserialize nó trong yêu cầu/đáp ứng mỗi lần." Làm thế nào để tôi chọn cái khác? –

+1

@KayayTugay có một tham số javax.faces.STATE_SAVING_METHOD trong cấu hình – ewernli

+0

Cảm ơn bạn rất nhiều. –

13

Nếu bạn đã quen thuộc với JavaScript, bạn có thể nghĩ về cây thành phần JSF giống như một DOM HTML nơi trang HTML định nghĩa trạng thái ban đầu nhưng bạn có thể thay đổi nó khi chạy.

Công nghệ chế độ xem (thường là JSP hoặc Facelets) xác định trạng thái ban đầu, nhưng sau đó nó có thể được điều khiển theo chương trình. Ví dụ: bạn có thể thêm component hoặc đặt property. Để điều này hoạt động đúng, trạng thái xem phải được duy trì giữa các yêu cầu.

Trạng thái chế độ xem được chia thành hai phần. Đầu tiên xác định cấu trúc của cây thành phần:

UIView 
- UIForm 
    - UICommand 
    - UIInput 

Phần thứ hai xác định trạng thái của các thành phần. Đây là những riêng biệt do các thành phần như UIData, nơi mà có thể cho trẻ em có (ví dụ) cho mỗi trạng thái hàng. Đây là marshalled/unmarshalled thông qua các cơ chế StateHolder.

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