2011-11-06 32 views
11

Sử dụng jsf 2.2.0.lịch thủ tục: nhập ngày sai

Đối với tất cả ngày, có vẻ như xóa một ngày. Khi tôi nhấp vào 8 nov, nó sẽ hiển thị 11/08/2011. Nhưng sau đó nó lưu trữ ngày 7 tháng 11 năm 2011 trong trường Ngày của tôi trong bean được quản lý của tôi.

Tôi sống ở singapore, tự hỏi đây có phải là vấn đề với múi giờ không.

+1

Could được. Nếu không, nó có thể là một vấn đề của Primefaces. Nó khá là lỗi ... Dù sao, đừng dùng 'Date'-s, sử dụng' Calendar'-s để thay thế. – zeller

+0

Trường ngày không thể lưu trữ một ngày cụ thể. Tất cả các cửa hàng là một số nguyên. Có nhiều cách khác nhau để chuyển số nguyên đó cho một ngày, đó là nơi mà vấn đề của bạn đến từ đó. – MatsT

+0

@zeller Tôi quan tâm đến đề xuất của bạn không sử dụng java.util.Date. Tại sao điều này? – 8bitjunkie

Trả lời

-1

Bạn đã cố gắng đặt thuộc tính timezonelocate? Nếu không, bạn có thể tạo đối tượng chuyển đổi chuyển đổi ngày. Đây là một hướng dẫn để tạo ra một chuyển đổi tùy chỉnh: http://www.roseindia.net/jsf/customconverter.shtml

23

thử này thêm vào web.xml của bạn

<context-param> 
    <param-name>javax.faces.DATETIMECONVERTER_DEFAULT_TIMEZONE_IS_SYSTEM_TIMEZONE</param-name> 
    <param-value>true</param-value> 
</context-param> 
+0

Đó chắc chắn là vấn đề múi giờ. Bạn có thể (nên được) chạy máy chủ của bạn trong UTC. Primefaces sẽ khu vực hóa ngày của bạn và chuyển đổi nó thành thời gian người dùng. Bạn có thể, và có lẽ nên chạy máy chủ của bạn với "-Duser.timezone = UTC". Param bối cảnh nên sửa chữa nó. –

+0

Đã xác nhận, vấn đề múi giờ. Param param cố định nó (JSF 2.2.5, PrimeFaces 4.0). – Gilberto

0

Thêm đối số -Duser.timezone=UTC các thông số khởi động vấn đề cố định cho tôi.

Để tóm tắt: làm việc lịch trình chỉ tốt khi các thông số sau đây là bộ:: p

-Duser.timezone=UTC

<context-param> 
    <param-name>javax.faces.DATETIMECONVERTER_DEFAULT_TIMEZONE_IS_SYSTEM_TIMEZONE</param-name> 
    <param-value>true</param-value> 
</context-param> 
0

Tôi vừa thêm vào các tham số sau trong web.xml và vấn đề được cố định. Tôi không bao gồm bất kỳ lệnh nào như -Duser.timezone = UTC khi khởi động máy chủ, vẫn khắc phục sự cố.

javax.faces.DATETIMECONVERTER_DEFAULT_TIMEZONE_IS_SYSTEM_TIMEZONE đúng

Trân Khaleel

0

Tôi đang sử dụng Wildfly 8 và PF 5.0.RC1 và điều duy nhất mà đã làm các trick đối với tôi là thiết lập múi giờ của lịch không có gì ...

<p:calendar timeZone = "" /> 

Không biết đây có phải là giải pháp thích hợp hay không, có vẻ giống như cách giải quyết khác, nhưng nó hoạt động tốt tại địa phương và được triển khai.

2

Nếu bạn đang sử dụng primefaces 5, trong lịch trình của bạn:

<p:schedule ...ignoreTimezone="false" /> 
0

Có lẽ đó là vì bạn không chèn giờ. Ví dụ: trong trường hợp này

<p:calendar id="dateFromCalendar" 
    value="#{platform.frameBean.dateFrom}" showOn="button" 
    pattern="dd-MM-yyyy" timeZone="Europe/Warsaw"> 
</p:calendar> 

giờ sẽ đến 00:00 của ngày thực tế. Và bởi vì múi giờ (-02: 00), giờ sẽ xuất hiện là 22:00 của ngày trước ngày thực tế. Những điều đúng để làm là

<p:calendar id="dateFromCalendar" 
    value="#{platform.frameBean.dateFrom}" showOn="button" 
    pattern="dd-MM-yyyy HH:mm" timeZone="Europe/Warsaw"> 
</p:calendar> 

Giờ sẽ xuất hiện, vì vậy các múi giờ sẽ làm cho các tính toán đúng

0

Trong phần lịch của bạn, thêm một bộ chuyển đổi và chỉ ra múi giờ của bạn ví dụ như

<p:calendar id="date"> 
    <f:convertDateTime timeZone="Asia/Singapore"></f:convertDateTime> 
</p:calendar 
Các vấn đề liên quan