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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 前端技术 > javascript >内容正文

javascript

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

發(fā)布時(shí)間:2023/12/3 javascript 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java jsf_将Java 8日期时间API与JSF和Java EE 7结合使用 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

java jsf

如果您將Java 8與Java EE 7一起使用,則在嘗試?yán)媚承㎎ava 8新功能時(shí)可能會(huì)遇到一些怪癖。 一個(gè)這樣的怪癖是,默認(rèn)情況下,新的Date-Time API不適用于許多Java EE 7 API,因?yàn)樗鼈兪菫榕cjava.util.Date和/或更舊的Date API一起使用而構(gòu)建的。 但是,這不是障礙,因?yàn)橛性S多方法可以解決此類問(wèn)題。 在本文中,我將演示如何調(diào)整JSF應(yīng)用程序,以允許將Java 8 Date-Time API與JPA和日期轉(zhuǎn)換器一起使用。

首先,如果您希望使用新的LocalDate類(或Java 8 Date-Time API中的其他類)來(lái)保留日期,則需要開(kāi)發(fā)一個(gè)轉(zhuǎn)換器,該轉(zhuǎn)換器將自動(dòng)從java.time.LocalDate轉(zhuǎn)換為java.util.Date ,反之亦然,以便使用JPA 2.1。 這很容易做到,尤其是因?yàn)椴恍枰渲萌魏蝀ML即可建立轉(zhuǎn)換器。 以下代碼是用于為JPA提供Java 8 Date-Time支持的轉(zhuǎn)換器:

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()方法接受一個(gè)
來(lái)自實(shí)體,類的LocalDate,然后利用某些Java 8 Date-Time API實(shí)用程序?qū)⑵滢D(zhuǎn)換為java.util.Date以便可以將其存儲(chǔ)到數(shù)據(jù)庫(kù)中。 第二種方法convertToEntityAttribute()從JPA中獲取一個(gè)java.util.Date并將其沿相反的方向轉(zhuǎn)換為L(zhǎng)ocalDate對(duì)象,以與基于Java 8的應(yīng)用程序一起使用。 @Converter批注將類注冊(cè)為轉(zhuǎn)換器,并且實(shí)現(xiàn)AttributeConverter將該轉(zhuǎn)換器應(yīng)用于實(shí)體類,以便將狀態(tài)轉(zhuǎn)換為數(shù)據(jù)庫(kù)列,然后再次返回。

接下來(lái),如果您嘗試將JSF轉(zhuǎn)換器應(yīng)用于應(yīng)用程序中的Java 8 LocalDate (例如在視圖中),則將遇到問(wèn)題,除非您編寫特殊的FacesConverter實(shí)現(xiàn)以應(yīng)用于要轉(zhuǎn)換為L(zhǎng)ocalDate的組件。 編寫FacesConverter就像實(shí)體類屬性轉(zhuǎn)換器一樣簡(jiǎn)單,注冊(cè)就像將注釋應(yīng)用到轉(zhuǎn)換器一樣容易。 下列類是FacesConverter的示例,該示例會(huì)將java.time.LocalDate轉(zhuǎn)換為java.util.Date ,以便在JSF組件中使用。

注意:這也適用于流行的JSF組件庫(kù),例如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"));}}

現(xiàn)在讓我們看一下代碼。 這個(gè)FacesConverter類是通過(guò)@FacesConverter批注注冊(cè)的,該類可以簡(jiǎn)單地實(shí)現(xiàn)javax.faces.convert.Converter接口。 接下來(lái),看一下實(shí)現(xiàn)。 getAsObject()方法用于解析組件中的String并將其作為java.time.LocalDate返回,而getAsString()方法接受LocalDate對(duì)象并以指定的日期格式將其作為String返回。 這展示了Java 8的另一個(gè)不錯(cuò)的功能……
DateTimeFormatter類,可輕松格式化java.time.*對(duì)象。

就是這樣……在Java EE 7應(yīng)用程序中使用漂亮的Java 8 Date-Time API并不是太困難。 現(xiàn)在,將轉(zhuǎn)換器應(yīng)用于日期組件。 以下標(biāo)記演示了如何將轉(zhuǎn)換器應(yīng)用于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 jsf

總結(jié)

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

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。