2011-12-12 28 views
40

Tôi không thể hiểu được chức năng của dòng này trong web.xmlSTATE_SAVING_METHOD tham số trong JSF 2.0

<context-param> 
    <param-name>javax.faces.STATE_SAVING_METHOD</param-name> 
    <param-value>server</param-value> 
</context-param> 

Tôi đã đọc rằng NetBeans mặc định là client là gì là gì. Tôi vừa phải đối mặt với một vấn đề mà tôi có nhiều đậu trong ứng dụng của tôi, và <param-value> đã được thiết lập cho khách hàng, vì vậy tôi đã nhận được

java.io.NotSerializableException

lỗi mặc dù đậu của tôi là Serializable (tức là họ thực hiện giao diện Serializable.). Đậu của tôi đã ở số @ViewScope. Nhưng khi tôi đổi nó thành máy chủ, mọi thứ sẽ hoạt động. Tại sao? Sự khác biệt khi tôi sử dụng máy khách và máy chủ là gì. Bất cứ ai có thể giải thích cho tôi với sự giúp đỡ của một ví dụ.

Cảm ơn

Trả lời

51
java.io.NotSerializableException 

Đây là loại ngoại lệ thường có một tin nhắn trong nguyên nhân gốc rễ trong đó cho thấy tên lớp đầy đủ của lớp mà không thực hiện Serializable. Bạn nên chú ý đến thông điệp này để tìm hiểu về lớp học mà nó đang nói đến và sau đó để cho nó thực hiện Serializable cho phù hợp.

Thông thường, làm cho chỉ các lớp bean được quản lý của bạn có thể tuần tự hóa không phải lúc nào cũng đủ. Bạn cũng cần đảm bảo rằng mỗi thuộc tính của nó mỗi thuộc tính của nó cũng có thể tuần tự hóa được. Hầu hết các loại tiêu chuẩn như String, Long, v.v. thực hiện tất cả đã Serializable. Nhưng (các kiểu tùy chỉnh) phức tạp như các bean lồng nhau, các thực thể hoặc các EJB nên cũng có thể được tuần tự hóa. Nếu một cái gì đó không thực sự có thể thực hiện được như Serializable, chẳng hạn như InputStream, thì bạn nên thiết kế lại mô hình hoặc làm cho nó transient (và lưu ý rằng nó sẽ là null sau khi deserialization).


sự khác biệt là gì khi tôi sử dụng client và server

Trước một số thông tin cơ bản: Why JSF saves the state of UI components on server?

Sự khác biệt kỹ thuật chủ yếu là các client cửa hàng thiết lập toàn bộ xem trạng thái là giá trị của trường nhập ẩn javax.faces.ViewState trong đầu ra HTML được tạo và rằng thanh toán server ing lưu trữ nó trong phiên cùng với một ID duy nhất mà lần lượt được tham chiếu là giá trị của trường nhập ẩn javax.faces.ViewState.

Vì vậy, hãy đặt thành client làm tăng mức sử dụng băng thông mạng nhưng giảm mức sử dụng bộ nhớ máy chủ và cài đặt thành server theo cách khác. Tuy nhiên, việc đặt thành client có lợi thế về chức năng bổ sung: ngăn chặn ViewExpiredException giây khi phiên hết hạn hoặc khi khách hàng mở quá nhiều lượt xem.

+1

Còn CSRF và Phishing nếu tôi sử dụng cài đặt ứng dụng khách. – Kayser

+1

Nó được mã hóa/mã hóa. – BalusC

11

Thông số javax.faces.STATE_SAVING_METHOD được sử dụng để chỉ định nơi lưu trạng thái.

Nếu bạn muốn lưu trạng thái trên máy chủ (là mặc định trong triển khai tham chiếu JavaServer Faces), hãy chỉ định giá trị param-valueserver.

Nếu không, để lưu trạng thái ở phía máy khách, chúng tôi có thể chỉ định client trong param-value.

Nếu trạng thái được lưu trên máy khách, trạng thái của toàn bộ khung nhìn được hiển thị cho một trường ẩn trên trang.

+0

Không lưu ViewState được tuần tự hóa ở phía máy khách do lỗi này http://foxglovesecurity.com/2015/11/06/what-do-weblogic-websphere-jboss-jenkins-opennms-and-your-application-have- lỗ hổng phổ biến / –

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