2012-02-07 33 views
36

Có thể hiển thị ngày hiện tại (hôm nay) trong JSF mà không sử dụng bean sao lưu không?Hiển thị ngày hiện tại trên trang JSF

Tôi có đoạn mã sau, nhưng đoạn mã không hoạt động.

<div class="leftSide">Today's date #{currentDate}</div> 

hoặc

<f:facet name="header"> 
<h:outputText value="Today's date" /> 
</f:facet> 
<h:outputText value="#currentDate"> 
    <f:convertDateTime pattern="MM/dd/yyyy" type="date" /> 
</h:outputText> 

Trả lời

82

Bạn có thể đăng ký một thể hiện của java.util.Date như một yêu cầu scoped đậu trong faces-config.xml.

<managed-bean> 
    <managed-bean-name>currentDate</managed-bean-name> 
    <managed-bean-class>java.util.Date</managed-bean-class> 
    <managed-bean-scope>request</managed-bean-scope> 
</managed-bean> 

Cách này có sẵn dưới dạng #{currentDate} mà không cần lớp bean sao lưu tùy chỉnh.


Cập nhật: tiện ích JSF thư viện OmniFaces có như vậy một bean already registered như #{now}. Vì vậy, nếu bạn tình cờ sử dụng OmniFaces, bạn chỉ có thể sử dụng nó trực tiếp.

<h:outputText value="#{now}"> 
    <f:convertDateTime pattern="MM/dd/yyyy" type="date" /> 
</h:outputText> 
+0

Cảm ơn bạn, một lần nữa bạn đã cứu tôi :) – Namita

+50

Tôi muốn có một chế độ lọc google cho "trả lời bởi BalusC". Tôi sẽ tiết kiệm rất nhiều thời gian. – SJuan76

+3

May mắn thay biệt danh của tôi khá độc đáo trên thế giới (được quyết định rất lâu trước đây), vì vậy chỉ cần thêm "balusc" làm từ khóa tìm kiếm thêm :) – BalusC

30

Trong JSF bạn có thể sử dụng đối tượng EL ngầm session cung cấp truy cập đến hiện tại HttpSession. Thời gian HttpSession#getLastAccessedTime ...

... trả lại thời gian qua, khách hàng gửi một yêu cầu kết hợp với phiên này, vì số mili giây kể từ nửa đêm ngày 01 Tháng 1 năm 1970 GMT, và đánh dấu vào thời điểm container nhận được yêu cầu.

Vì vậy, bạn có thể sử dụng đoạn mã sau trong facelet của bạn:

<h:outputText value="#{session.lastAccessedTime}"> 
     <f:convertDateTime pattern="MM/dd/yyyy" type="date" /> 
</h:outputText> 

Đây sẽ là thời gian máy chủ và có thể khác với thời gian của khách hàng đối với các múi giờ khác nhau với.

Nhưng bạn cũng có thể sử dụng một giải pháp javascript, như đã thảo luận ở đây:

How do I get the current date in JavaScript?

+0

'Phiên' có được bảo đảm tồn tại (không trống) trong mọi yêu cầu không? –

+0

Trên thực tế, lastAccessTime mang lại thời gian của yêu cầu trước đó. Đó có thể là một vài phút tắt thời gian hiện tại. –

6

Hoặc bạn có thể làm điều đó bằng cách sử dụng Omnifaces. Tôi ngạc nhiên khi BalusC không nói với bạn về giải pháp này (tôi nghĩ anh ấy là một cộng tác viên tuyệt vời của Omnifaces). Có lẽ đó là bởi vì sử dụng Omnifaces chỉ để hiển thị một ngày đơn giản trong một trang có thể là một overkill cho một số.

Dù sao, nếu dự án của bạn đã sử dụng Omnifaces, có 2 hạt được quản lý được hiển thị theo mặc định và một đặc biệt mà bạn có thể thấy thuận tiện. Theo số tag documentation chỉ định, khi Omnifaces được thêm vào dự án của bạn, bạn có thể sử dụng bean được quản lý #{now}.

Ví dụ, để thiết lập ngày max lịch của Primefaces, tôi chỉ viết những điều sau đây:

<p:calendar id="myCalendar" pattern="dd/MM/yyyy" 
       value="#{mybean.myDate}" maxdate="#{now}"/> 

Tôi đoán #{now} bean được quản lý có thể được sử dụng trong nhiều tình huống hơn, và có lẽ bạn là tốt.

Nếu dự án của bạn chưa sử dụng Omnifaces, tôi khuyên bạn nên xem thông số kỹ thuật của chúng và xem mức độ hữu ích của nó đối với bạn. Ví dụ: Tôi đang sử dụng thẻ validateOrder để đảm bảo hai ngày được sắp xếp đúng cách.

+1

OmniFaces chưa tồn tại tại thời điểm tôi đăng câu trả lời :) – BalusC

+0

Bí ẩn được giải quyết! ;) ... Tôi không biết Omnifaces là trẻ. Đó là một số công việc tuyệt vời anyway! – jpramondon

+0

'Tôi nghĩ anh ấy là một cộng tác viên tuyệt vời của Omnifaces'. BalusC là tác giả của OmniFaces. Đó là em bé của anh ấy. –

0

Bạn có thể sử dụng thẻ mà PrimeFaces cung cấp.

<p:clock pattern="HH:mm:ss dd-MM-yyyy"/> 
Các vấn đề liên quan