אביב MVC והערת @ModelAttribute

1. סקירה כללית

אחת ההערות החשובות ביותר ב- Spring-MVC היא ההערה של @ModelAttribute.

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

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

2. ה @ModelAttribute בעומק

כפי שנחשפה בפסקת המבוא, @ModelAttribute יכול לשמש כפרמטר שיטה או ברמת השיטה.

2.1 ברמת השיטה

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

בואו נסתכל על דוגמה מהירה כאן כדי להתחיל להבין כיצד זה עובד:

@ModelAttribute חלל ציבורי addAttributes (מודל מודל) {model.addAttribute ("msg", "ברוך הבא להולנד!"); } 

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

כמובן שנראה זאת בפעולה בהמשך המאמר.

באופן כללי, Spring-MVC תמיד יבצע שיחה ראשונה לשיטה זו, לפני שהיא קוראת לשיטות של מטפל בבקשות. זה, @ModelAttribute שיטות מופעלות לפני ששיטות הבקר מוסמנות באמצעות @ בקשת מיפוי מופעלות. ההיגיון מאחורי הרצף הוא שיש ליצור את אובייקט המודל לפני שמתחיל עיבוד כלשהו בתוך שיטות הבקר.

כמו כן, חשוב שתציין את המחלקה המתאימה כ- @ ControllerAdvice. לפיכך, תוכל להוסיף ערכים ב- דֶגֶם אשר יזוהו כגלובלי. פירוש הדבר הוא שלכל בקשה קיים ערך ברירת מחדל, לכל שיטה בחלק התגובה.

2.2 כטיעון שיטה

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

בקטע הקוד העוקב אחרי ה- עוֹבֵד מאפיין המודל מאוכלס בנתונים מטופס שהוגש ל להוסיף עובד נקודת סיום. אביב MVC עושה זאת מאחורי הקלעים לפני שהוא קורא לשיטת ההגשה:

@RequestMapping (value = "/ addEmployee", method = RequestMethod.POST) public String submit (@ModelAttribute ("עובד") עובד עובד) {// קוד המשתמש באובייקט העובד מחזיר "עובד תצוגה"; }

בהמשך מאמר זה נראה דוגמה מלאה כיצד להשתמש ב- עוֹבֵד התנגדות לאכלוס עובד תצוגה תבנית.

אז זה קושר את נתוני הטופס עם שעועית. הבקר הביא הערה עם @ בקשת מיפוי יכולות להיות מסומנות עם ארגומנטים / מחלקות מותאמים אישית @ModelAttribute.

זה מה שמכונה בדרך כלל כריכת נתונים ב- Spring-MVC, מנגנון נפוץ החוסך ממך צורך לנתח כל שדה טופס בנפרד.

3. דוגמה לטופס

בחלק זה אנו נספק את הדוגמה אליה מתייחס בסעיף הסקירה הכללית: טופס בסיסי מאוד המבקש ממשתמש (עובד בחברה, בדוגמה הספציפית שלנו) להזין מידע אישי כלשהו (באופן ספציפי שֵׁם ו תְעוּדַת זֶהוּת). לאחר השלמת ההגשה וללא כל שגיאה, המשתמש מצפה לראות את הנתונים שהוגשו בעבר, המוצגים על גבי מסך אחר.

3.1 הנוף

בואו ניצור תחילה טופס פשוט עם שדות מזהה ושמות:

 מזהה שם 

3.2 הבקר

הנה מחלקת הבקר, בה מיושם ההיגיון לתצוגה האמורה:

@Controller @ControllerAdvice מחלקה ציבורית EmployeeController {מפה מפת עובד map = חדש HashMap (); @RequestMapping (value = "/ addEmployee", method = RequestMethod.POST) הגשת מחרוזת ציבורית (@ModelAttribute ("עובד") עובד עובד, תוצאת BindingResult, מודל ModelMap) {if (result.hasErrors ()) "שגיאה" ; } model.addAttribute ("שם", employee.getName ()); model.addAttribute ("id", employee.getId ()); employeeMap.put (employee.getId (), עובד); להחזיר "עובד תצוגה"; } @ModelAttribute ציבורי ריק addAttributes (מודל מודל) {model.addAttribute ("msg", "ברוך הבא להולנד!"); }}

בתוך ה שלח() שיטה יש לנו עוֹבֵד חפץ קשור שלנו נוף. האם אתה יכול לראות את כוחה של ההערה הזו? אתה יכול למפות את שדות הטופס שלך למודל אובייקט פשוט כמו זה. בשיטה אנו מביאים ערכים מהצורה ומגדירים אותם ל ModelMap.

בסוף אנחנו חוזרים עובד תצוגה, מה שאומר שקובץ JSP בהתאמה ייקרא בשם נוף נציג.

יתר על כן, יש גם addAttributes () שיטה. מטרתו להוסיף ערכים ב- דֶגֶם אשר יזוהו ברחבי העולם. כלומר, ערך ברירת מחדל יוחזר כתגובה לכל בקשה לכל שיטת בקר. עלינו גם להעלות הערות על הכיתה הספציפית כ- @ControllerAdvice.

3.3 המודל

כאמור, דֶגֶם האובייקט הוא מאוד פשטני ומכיל את כל הנדרש מהתכונות "חזיתית". עכשיו, בואו נסתכל על דוגמה:

עובד בכיתה ציבורית @XmlRootElement {מזהה פרטי ארוך; שם מחרוזת פרטי; עובד ציבור (מזהה ארוך, שם מחרוזת) {this.id = id; this.name = שם; } // הוסרו וקבצים סטנדרטיים}

3.4 לעטוף

ה @ControllerAdvice מסייע לבקר ובמיוחד, @ModelAttribute שיטות החלות על כולם @ בקשת מיפוי שיטות. כמובן, שלנו addAttributes () השיטה תהיה הראשונה להפעלה, לפני שאר @ בקשת מיפוי שיטות.

תוך התחשבות בכך ואחרי שניהם שלח() ו addAttributes () מנוהלים, נוכל פשוט להתייחס אליהם ב נוף חזר מה- בקר בכיתה, על ידי אזכור שמם הנתון בתוך צמד פלטות מתולתלות בדולרים, כמו למשל $ {name}.

3.5 תצוגת תוצאות

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

$ {msg}

שם: $ {name} מזהה: $ {id}

4. מסקנה

במדריך זה חקרנו את השימוש ב- @ModelAttribute ביאור, הן לטיעוני שיטה והן למקרי שימוש ברמת השיטה.

את היישום של הדרכה פשוטה זו ניתן למצוא בפרויקט github.


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