日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

将Java 8日期时间API与JSF和Java EE 7结合使用

發布時間:2023/12/3 javascript 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 将Java 8日期时间API与JSF和Java EE 7结合使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

如果您將Java 8與Java EE 7一起使用,則在嘗試利用某些Java 8新功能時可能會遇到一些怪癖。 一個這樣的怪癖是,默認情況下,新的Date-Time API不適用于許多Java EE 7 API,因為它們是為與java.util.Date和/或較早的Date API一起使用而構建的。 但是,這并不是障礙,因為有許多方法可以解決此類問題。 在本文中,我將演示如何調整JSF應用程序,以允許將Java 8 Date-Time API與JPA和日期轉換器一起使用。

首先,如果您希望使用新的LocalDate類(或Java 8 Date-Time API中的其他類)來保留日期,則需要開發一個轉換器,該轉換器將自動從java.time.LocalDate轉換為java.util.Date ,反之亦然,以便與JPA 2.1一起使用。 這很容易做到,尤其是因為不需要配置任何XML即可建立轉換器。 以下代碼是用于為JPA提供Java 8 Date-Time支持的轉換器:

import java.time.Instant; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; import java.time.Month; import java.time.ZoneId; import java.util.Date; import javax.persistence.AttributeConverter; import javax.persistence.Converter;/*** Converter to provide Java 8 Date/Time API Support to JPA* * @author Juneau*/ @Converter(autoApply = true) public class LocalDatePersistenceConverter implements AttributeConverter<LocalDate, Date> {@Overridepublic Date convertToDatabaseColumn(LocalDate entityValue) {LocalTime time = LocalTime.now();Instant instant = time.atDate(entityValue).atZone(ZoneId.systemDefault()).toInstant();return Date.from(instant);}@Overridepublic LocalDate convertToEntityAttribute(Date databaseValue) {Instant instant = Instant.ofEpochMilli(databaseValue.getTime());return LocalDateTime.ofInstant(instant, ZoneId.systemDefault()).toLocalDate();} }

查看代碼, convertToDatabaseColumn()方法接受一個
來自實體,類的LocalDate,然后利用某些Java 8 Date-Time API實用程序將其轉換為java.util.Date以便可以將其存儲到數據庫中。 第二種方法convertToEntityAttribute()從JPA中獲取一個java.util.Date并將其沿相反的方向轉換為LocalDate對象,以與基于Java 8的應用程序一起使用。 @Converter批注將類注冊為轉換器,并且實現AttributeConverter將該轉換器應用于實體類,以便將狀態轉換為數據庫列并再次轉換為該列。

接下來,如果您嘗試將JSF轉換器應用于應用程序中的Java 8 LocalDate ,例如在視圖中,則將遇到問題,除非您編寫特殊的FacesConverter實現以應用于要轉換為LocalDate的組件。 編寫FacesConverter就像實體類屬性轉換器一樣簡單,注冊就像將注釋應用到轉換器一樣容易。 下列類是FacesConverter的示例,該示例會將java.time.LocalDate轉換為java.util.Date以便在JSF組件中使用。

注意:這也適用于流行的JSF組件庫,例如PrimeFaces。

import java.time.LocalDate; import java.time.format.DateTimeFormatter; import javax.faces.component.UIComponent; import javax.faces.context.FacesContext; import javax.faces.convert.FacesConverter;/*** Faces converter for support of LocalDate* @author Juneau*/ @FacesConverter(value="localDateTimeConverter") public class LocalDateTimeConverter implements javax.faces.convert.Converter {@Overridepublic Object getAsObject(FacesContext context, UIComponent component, String value) {return LocalDate.parse(value);}@Overridepublic String getAsString(FacesContext context, UIComponent component, Object value) {LocalDate dateValue = (LocalDate) value;return dateValue.format(DateTimeFormatter.ofPattern("MM/dd/yyyy"));}}

現在讓我們看一下代碼。 這個FacesConverter類是通過@FacesConverter批注注冊的,并且該類可以簡單地實現javax.faces.convert.Converter接口。 接下來,看一下實現。 getAsObject()方法用于從組件中解析字符串,并將其作為java.time.LocalDate返回,而getAsString()方法接受LocalDate對象,并以指定的日期格式將其作為String返回。 這展示了Java 8的另一個不錯的功能……
DateTimeFormatter類,可輕松格式化java.time.*對象。

就是這樣……在Java EE 7應用程序中使用漂亮的Java 8 Date-Time API并不是太困難。 現在,將轉換器應用于日期組件。 以下標記演示了如何將轉換器應用于PrimeFaces日歷組件。

<p:calendar id="enterDate" converter="localDateTimeConverter" style="width: 100%;"readonly="true" value="#{myExcellentJsfController.current.enterDate}"></p:calendar>

翻譯自: https://www.javacodegeeks.com/2015/06/utilizing-the-java-8-date-time-api-with-jsf-and-java-ee-7.html

總結

以上是生活随笔為你收集整理的将Java 8日期时间API与JSF和Java EE 7结合使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。