2015-09-25 20 views
6

Thời gian chờ của phiên có thể xảy ra nếu có một số tệp rất lớn được tải lên không? Hãy tưởng tượng tôi tải lên một tệp lớn 5 GByte và thời gian chờ phiên ngắn được đặt. Thời gian chờ của phiên có thể xảy ra trong khi phát trực tuyến tệp không?Tệp PrimefacesTải lên và thời gian chờ của phiên

Trả lời

8

Có, nó có thể. Các servlet specification không nơi nào cấm rằng một phiên có thể bị phá hủy trong một yêu cầu hoạt động. Do đó, bạn sẽ gặp rủi ro khi ViewExpiredException khi tải lên như vậy đến với bean.

Nếu đây là mối quan tâm của bạn, bạn đã một vài lựa chọn:

  1. Hãy để cho hình thức tải lên không đồng bộ thăm dò ý kiến ​​để server theo chu kỳ để giữ phiên còn sống. Bạn có thể sử dụng EL #{session.maxInactiveInterval} để có thời gian chờ hiện tại tính bằng giây.

    <p:fileUpload ... /> 
    <p:poll interval="#{session.maxInactiveInterval - 10}" async="true" /> 
    

    Sự khác biệt 10 giây chỉ là để ngăn chặn điều đó nó đến một vài giây quá muộn vì trang đó cũng có thể mất một thời gian để tải tất cả các HTML và để khởi tạo cuộc bình chọn. Bạn có thể nếu cần thiết có điều kiện bắt đầu/trả lời bình chọn khi bắt đầu tải lên.


  2. Hãy để "OnStart" trường hợp upload tăng thời gian chờ phiên đến một giới hạn nhất định (giờ?) Và để cho các "onComplete" trường hợp upload đặt nó trở lại.

    <p:fileUpload ... onstart="increaseTimeout()" oncomplete="resetTimeout()" /> 
    <p:remoteCommand name="increaseTimeout" listener="#{bean.increaseTimeout}" /> 
    <p:remoteCommand name="resetTimeout" listener="#{bean.resetTimeout}" /> 
    

    Bạn có thể sử dụng bean ExternalContext#setSessionMaxInactiveInterval() để đặt thời gian chờ của phiên mong muốn tính bằng giây.


  3. Sử dụng một hình thức stateless JSF. Chế độ xem sẽ không bao giờ hết hạn, bất kể phiên HTTP hoạt động như thế nào.

    <f:view transient="true"> 
        ... 
    </f:view> 
    

    Lưu ý: bất kỳ hạt nào có phạm vi xem được gắn với chế độ xem như vậy sẽ hoạt động giống như yêu cầu. Để tránh nhầm lẫn, hãy thay thế chú thích nếu cần.

+0

Cảm ơn rất nhiều. Tôi sẽ sử dụng tùy chọn 2 vì 'p: fileUpload' không hiển thị trong trường hợp của tôi khi quá trình tải lên được thực hiện. Nó nằm bên trong một hộp thoại sẽ được đóng lại và quá trình tải lên được bắt đầu qua cuộc gọi javascript. – opfau

+0

Bạn được chào đón. – BalusC

+1

+1 để đề cập đến biểu mẫu JSF không quốc tịch! : D không biết điều đó cho đến bây giờ. trong bản phát hành jsf nào sẽ có sẵn? – Fritz

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