כיצד לעבוד עם תאריכים ב- Thymeleaf

1. הקדמה

Thymeleaf הוא מנוע תבנית Java שתוכנן לעבוד ישירות עם Spring. לקבלת מבוא ל- Thymeleaf ו- Spring, עיין במכתב זה.

מלבד הפונקציות הבסיסיות הללו, Thymeleaf מציע לנו קבוצה של אובייקטים של כלי עזר שיעזרו לנו לבצע משימות נפוצות ביישום שלנו.

במאמר זה נדון בעיבוד ועיצוב הג'אווה החדשה והוותיקה תַאֲרִיך שיעורים עם קומץ תכונות של Thymeleaf 3.0.

2. תלות Maven

ראשית, בואו נראה את התצורה הדרושה לשילוב Thymeleaf עם Spring בתוכנו pom.xml:

 org.thymeleaf thymeleaf 3.0.11. RELEASE org.thymeleaf thymeleaf-spring5 3.0.11. RELEASE 

הגרסאות האחרונות של טימילף ו 5. אביב קפיץ ניתן למצוא ב Maven Central. שים לב שעבור פרויקט אביב 4, קפיץ עליון 4 יש להשתמש בספריה במקום 5. אביב קפיץ.

יתר על כן, על מנת לעבוד עם Java 8 חדש תַאֲרִיך שיעורים, נוסיף את התלות הבאה שלנו pom.xml:

 org.thymeleaf.extras thymeleaf-extras-java8time 3.0.4.RELEASE 

ה תוספות עלים הוא מודול אופציונלי, הנתמך באופן מלא על ידי צוות Thymeleaf הרשמי, שנוצר לצורך תאימות ל- Java 8 Time API. זה מוסיף #זמניים התנגדות ל הֶקשֵׁר כמעבד אובייקט שירות במהלך הערכות ביטוי. המשמעות היא שניתן להשתמש בו להערכת ביטויים בשפת ניווט-אובייקט-גרף (OGNL) ובשפת ביטוי האביב (SpringEL).

3. ישן וחדש: java.util ו java.time

ה זְמַן החבילה היא תאריך, שעה ויומן API חדשים לפלטפורמת Java SE. ההבדל העיקרי בין מורשת ישנה תַאֲרִיך והוא שממשק ה- API החדש מבחין בין תצוגות מכונה לאנושיות של ציר זמן. תצוגת המכונה חושפת רצף של ערכים אינטגרליים ביחס ל- תְקוּפָה, ואילו התצוגה חושפת מערך שדות (למשל, שנה או יום).

לעבוד עם החדש זְמַן חבילה, עלינו להגדיר את מנוע התבנית שלנו לשימוש החדש Java8TimeDialect:

פרטי ISpringTemplateEngine templateEngine (ITemplateResolver templateResolver) {מנוע SpringTemplateEngine = חדש SpringTemplateEngine (); engine.addDialect (Java8TimeDialect חדש ()); engine.setTemplateResolver (templateResolver); מנוע החזרה; }

זה יוסיף את ה- #זמניים אובייקט הדומה לאלה בדיאלקט הסטנדרטי, ומאפשר עיצוב ויצירה של זְמַנִי אובייקטים מתבניות Thymeleaf.

על מנת לבדוק את העיבוד של מחלקות חדשות וישנות, ניצור את המשתנים הבאים ונוסיף אותם כאובייקטים מודל למחלקת הבקר שלנו:

model.addAttribute ("standardDate", תאריך חדש ()); model.addAttribute ("localDateTime", LocalDateTime.now ()); model.addAttribute ("localDate", LocalDate.now ()); model.addAttribute ("חותמת זמן", Instant.now ());

עכשיו אנחנו מוכנים לשימוש ביטוי ו זמנייםחפצי שירות מסופק על ידי Thymeleaf.

3.1. עיצוב תאריכים

הפונקציה הראשונה שאנו רוצים לכסות היא העיצוב של a תַאֲרִיך אובייקט (שמתווסף לפרמטרים של מודל Spring). החלטנו להשתמש ב- ISO8601 פוּרמָט:

לא משנה איך שלנו תַאֲרִיך הוגדר בצד האחורי, הוא יוצג בהתאם לתקן שנבחר. ה תאריך סטנדרטי יעובד על ידי ה- #תאריכים תוֹעֶלֶת. החדש LocalDateTime,LocalDate ו רֶגַע שיעורים יעובדו על ידי #זמניים תוֹעֶלֶת. זו התוצאה הסופית שנראה בדפדפן:

זו התוצאה הסופית שנראה בדפדפן:

יתר על כן, אם אנו רוצים להגדיר את הפורמט באופן ידני, אנו יכולים לעשות זאת באמצעות:

כפי שאנו יכולים לבחון, איננו יכולים לעבד את רֶגַע שיעור עם #temporals.format (...) - זה יביא ל לא נתמך TemporalTypeException. יתר על כן, עיצוב ה- LocalDate אפשרי רק אם נציין רק את שדות התאריכים המסוימים, ודלג על שדות הזמן.

התוצאה הסופית:

3.2. השג שדות תאריך ספציפיים

על מנת להשיג את השדות הספציפיים של java.util.Date בכיתה, עלינו להשתמש בחפצי השירות הבאים:

$ {# dates.day (date)} $ {# dates.month (date)} $ {# dates.monthName (date)} $ {# dates.monthNameShort (date)} $ {# dates.year (date)} $ {# dates.dayOfWeek (תאריך)} $ {# dates.dayOfWeekName (תאריך)} $ {# dates.dayOfWeekNameShort (תאריך)} $ {# dates.hour (תאריך)} $ {# dates.minute (תאריך)} $ {# dates.second (תאריך)} $ {# dates.millisecond (תאריך)}

בשביל החדש java.time חבילה, אנחנו צריכים להישאר עם #זמניים כלי עזר:

$ {# temporals.day (תאריך)} $ {# temporals.month (תאריך)} $ {# temporals.monthName (תאריך)} $ {# temporals.monthNameShort (תאריך)} $ {# temporals.year (תאריך)} $ {# temporals.dayOfWeek (תאריך)} $ {# temporals.dayOfWeekName (תאריך)} $ {# temporals.dayOfWeekNameShort (תאריך)} $ {# temporals.hour (תאריך)} $ {# temporals.minute (תאריך)} $ {# temporals.second (תאריך)} $ {# temporals.millisecond (תאריך)}

בואו נסתכל על כמה דוגמאות. ראשית, בואו נראה את היום בשבוע של היום:

לאחר מכן, בואו נראה את שם יום השבוע:

ולסיום, בואו נראה את השנייה הנוכחית של היום:

שים לב שכדי לעבוד עם חלקי זמן, תצטרך להשתמש LocalDateTime, כפי ש LocalDate יזרוק שגיאה.

4. מסקנה

במדריך מהיר זה דנו בג'אווה תַאֲרִיך תכונות עיבוד המיושמות במסגרת Thymeleaf, גרסה 3.0.

ניתן למצוא את היישום המלא של מדריך זה בפרויקט GitHub - זהו פרויקט מבוסס Maven שקל לייבא ולהפעיל אותו.

איך לבדוק? ההצעה שלנו היא לשחק עם הקוד בדפדפן תחילה, ואז לבדוק גם את מבחני ה- JUnit הקיימים שלנו.

שים לב שהדוגמאות שלנו אינן מכסות את כל האפשרויות הזמינות ב- Thymeleaf. אם אתה רוצה ללמוד על כל סוגי השירותים, עיין במאמר שלנו המכסה את ביטויי האביב והטימילף.


$config[zx-auto] not found$config[zx-overlay] not found