מבוא ל- JSF EL 2

1. הקדמה

שפת ביטוי (EL), היא שפת סקריפטים שנראית באימוץ במסגרות Java רבות, כגון Spring with SpEL ו- JBoss עם JBoss EL.

במאמר זה נתמקד ביישום ה- JSF של שפת התסריט הזו - Unified EL.

EL נמצאת כיום בגרסה 3.0, שדרוג משמעותי המאפשר להשתמש במנוע העיבוד במצב עצמאי - למשל בפלטפורמת Java SE. גרסאות קודמות היו תלויות בשרת יישומים או בקונטיינר האינטרנט של ג'קרטה. מאמר זה דן בגרסת EL 2.2.

2. הערכה מיידית ונדחית

התפקיד העיקרי של EL ב- JSF הוא לחבר בין תצוגת JSF (בדרך כלל סימון XHTML) לבין ה- back-end מבוסס java. ה- back-end יכול להיות שעועית מנוהלת שנוצרה על ידי המשתמש, או אובייקטים מנוהלים על ידי מיכל כמו הפעלת HTTP.

אנו נבחן את EL 2.2. EL ב- JSF מגיע בשתי צורות כלליות, תחביר מיידי EL ותחביר נדחה EL.

2.1. תחביר מיידי EL

הידוע גם בשם JSP EL, זהו פורמט סקריפטים שהוא אחיזה מימי JSP של פיתוח יישומי אינטרנט ב- Java.

ביטויי JSP EL מתחילים בסימן הדולר ($) ואחריו התושבת המתולתלת השמאלית ({), ואחריו הביטוי בפועל, ולבסוף נסגר בסוגר המתולתל הימני (}):

$ {ELBean.value> 0}

תחביר זה:

  1. מוערך רק פעם אחת (בהתחלה) במחזור החיים של הדף. המשמעות של זה היא שהערך שהוא. קריאה על ידי הביטוי בדוגמה שלמעלה חייבת להיות מוגדרת לפני טעינת הדף.
  2. מספק גישה לקריאה בלבד לערכי שעועית.
  3. וכתוצאה מכך, דורש הקפדה על מוסכמת שמות JavaBean.

עבור רוב השימושים, צורה זו של EL אינה מאוד תכליתית.

2.2. ביצוע נדחה EL

ביצוע הנדחה EL הוא ה- EL המיועד לתקן JSF. ההבדל התחבירי העיקרי עם JSP EL הוא שהוא מסומן בסימן "#” במקום "$“.

# {ELBean.value> 0}

EL נדחה:

  1. מסונכרן עם מחזור החיים של JSF. משמעות הדבר היא כי ביטוי EL ב- EL נדחה מוערך בנקודות שונות בתצוגת דף JSF (בתחילתו ובסופו).
  2. מספק גישה לקריאה וכתיבה לערכי שעועית. זה מאפשר להגדיר ערך בשעועית גיבוי של JSF (או בכל מקום אחר) באמצעות EL.
  3. מאפשר למתכנת להפעיל שיטות שרירותיות על אובייקט ובהתאם לגרסת ה- EL, להעביר טיעונים לשיטות כאלה.

EL מאוחד הוא המפרט המאחד גם את EL הנדחים וגם את JSP EL, ומאפשר לשני התחביר באותו עמוד.

3. EL מאוחד

Unified EL מאפשר שני טעמים כלליים של ביטויים, ביטויים ערכיים וביטויי שיטה.

והערה מהירה - החלקים הבאים יציגו כמה דוגמאות, שכולן זמינות באפליקציה (ראה קישור Github בסוף) על ידי ניווט אל:

//localhost:8080/jsf/el_intro.jsf

3.1. ביטויי ערך

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

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

שלום, # {ELBean.firstName}

הביטוי הבא מאפשר לנו להגדיר ערך על אובייקט המשתמש:

על המשתנה לפעול על פי אמנת שמות JavaBean כדי להיות זכאי לטיפול מסוג זה. כדי שהערך של השעועית יתחייב, צריך לשמור את הטופס הסוגר.

3.2. ביטויי שיטה

Unified EL מספק ביטויי שיטות לביצוע שיטות ציבוריות ולא סטטיות מתוך עמוד JSF. לשיטות עשויות להיות ערכי החזרה או לא.

הנה דוגמה מהירה:

ה לשמור() השיטה שאליה מתייחסים מוגדרת על שם שעועית גב ELBean.

החל מ- EL 2.2, תוכל גם להעביר טיעונים לשיטה אליה ניגשת באמצעות EL. זה יכול לאפשר לנו לכתוב מחדש את הדוגמה שלנו כך:

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

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

3.3. חפצי EL משתמעים

מנוע JSF EL מספק גישה למספר אובייקטים המנוהלים על ידי מיכל. חלקם הם:

  • #{יישום}: זמין גם בתור # {servletContext}, זהו האובייקט המייצג את המופע של יישום האינטרנט
  • # {applicationScope}: מפת משתנים הנגישה לכל יישום האינטרנט
  • #{עוגייה}: מפה של משתני ה- HTTP Cookie
  • # {facesContext}: המקרה הנוכחי של FacesContext
  • #{הֶבזֵק}: אובייקט ה- Scop Flash של JSF
  • #{כּוֹתֶרֶת}: מפה של כותרות ה- HTTP בבקשה הנוכחית
  • # {initParam}: מפה של משתני אתחול ההקשר של יישום האינטרנט
  • # {param}: מפה של פרמטרי שאילתת בקשת HTTP
  • #{בַּקָשָׁה}: ה HTTPServletRequest לְהִתְנַגֵד
  • # {requestScope}: מפת משתנים בהיקף בקשה
  • # {sessionScope}: מפת משתנים בהיקף הפעלה
  • #{מוֹשָׁב}: ה HTTPS סשן לְהִתְנַגֵד
  • # {viewScope}: מפת טווח תצוגה (עמוד) של משתנים

הדוגמה הפשוטה הבאה מפרטת את כל כותרות הבקשות והערכים על ידי גישה ל- כותרות אובייקט מרומז:

# {header.key}# {header.value}

4. מה אתה יכול לעשות ב- EL

הרבגוניות שלו יכולה להיות מוצגת בקוד Java, סימון XHTML, Javascript ואפילו בקבצי תצורה של JSF כמו ה- faces-config.xml קוֹבֶץ. בואו נבדוק כמה מקרי שימוש קונקרטיים.

4.1. השתמש ב- EL בסימון הדפים

ניתן להציג EL בתגי HTML סטנדרטיים:

4.2. השתמש ב- EL ב- JavaScript

EL יתפרש כאשר הוא נתקל ב- Javascript או בתגיות:

 var theVar = # {ELBean.firstName};

משתנה שעועית גיבוי יוגדר כמשתנה javascript כאן.

4.3. הערך לוגיקה בוליאנית ב- EL באמצעות מפעילים

EL תומכת במפעילי השוואה מתקדמים למדי:

  • שווה ערך מפעיל שוויון, שווה ערך ל"==.”
  • לט פחות מ- operator, שווה ערך ל- "<."
  • le פחות או שווה למפעיל, שווה ערך ל "<=".
  • gt גדול מהמפעיל, שווה ערך ל- ">."
  • ge גדול או שווה, שווה ערך ל">=.

4.4. הערך את EL בשעועית גב

מתוך קוד שעועית הגיבוי, ניתן להעריך ביטוי EL באמצעות יישום JSF. זה פותח עולם של אפשרויות, בחיבור דף JSF עם שעועית הגיבוי. אתה יכול לאחזר אובייקטים EL מרומזים, או לאחזר רכיבי עמוד HTML בפועל או את ערכם בקלות מהשעועית המגבה:

FacesContext ctx = FacesContext.getCurrentInstance (); אפליקציית יישום = ctx.getApplication (); מחרוזת firstName = app.evaluateExpressionGet (ctx, "# {firstName.value}", String.class); HtmlInputText firstNameTextBox = app.evaluateExpressionGet (ctx, "# {firstName}", HtmlInputText.class);

זה מאפשר למפתח גמישות רבה באינטראקציה עם דף JSF.

5. מה אינך יכול לעשות ב- EL

ל- EL <3.0 יש מגבלות מסוימות. החלקים הבאים דנים בכמה מהם.

5.1. ללא עומס יתר

EL אינה תומכת בשימוש בעומס יתר. אז בשעועית גב עם השיטות הבאות:

שמירת חלל ציבורי (משתמש המשתמש); שמירת חלל ציבורי (שם משתמש מחרוזת); שמירת חלל ציבורי (uid שלם);

JSF EL לא יוכל להעריך כראוי את הביטוי הבא

ה- JSF ELResolver יבחון מקרוב את הגדרת הכיתה של אפונה, ובחר את השיטה הראשונה שהוחזרה על ידי java.lang.Class # getMethods (שיטה המחזירה את השיטות הקיימות בכיתה). סדר השיטות שהוחזרו אינו מובטח והדבר יביא בהכרח להתנהגות לא מוגדרת.

5.2. אין ערכים או ערכים קבועים

JSF EL <3.0, אינו תומך בשימוש בערכים קבועים או ב- Enums בסקריפט. אז, לאחר כל אחד מהדברים הבאים

final static final מחרוזת USER_ERROR_MESS = "לא, אתה לא יכול לעשות את זה"; ימי enum {שבת, ראשון, שני, שלישי, רביעי, ה ', שישי};

פירושו שלא תוכל לבצע את הפעולות הבאות

5.3. אין בטיחות אפס מובנית

JSF EL <v3.0 אינו מספק גישה בטוחה null מרומזת, שחלקם עשויים למצוא מוזר לגבי מנוע תסריטים מודרני.

אז אם אדם בביטוי למטה הוא אפס, הביטוי כולו נכשל עם NPE מכוער

שלום מר, # {ELBean.person.sname} "

6. מסקנה

בדקנו כמה מהיסודות של JSF EL, חוזקות ומגבלות.

זו בעיקר שפת תסריטים רב-תכליתית עם מקום לשיפור; זה גם הדבק המחבר את תצוגת JSF, לדגם JSF ולבקר.

קוד המקור שמלווה מאמר זה זמין ב- GitHub.