תחילת העבודה עם טפסים באביב MVC

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

במאמר זה נדון בטפסי אביב ובכריכת נתונים לבקר. כמו כן, נסתכל על אחת ההערות העיקריות ב- אביב MVC כְּלוֹמַר @ModelAttribute.

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

2. המודל

ראשית - בואו נגדיר ישות פשוטה שנציג ונקשר לטופס:

שכבה ציבורית עובד {שם מחרוזת פרטי; מזהה פרטי פרטי; פרטי מחרוזת contactNumber; // סטרים וקובעים סטנדרטיים}

זה יהיה האובייקט שלנו לגיבוי צורה.

3. הנוף

הבא - בואו נגדיר הצורה בפועל, וכמובן, קובץ ה- HTML שמכיל אותו. אנו נשתמש בדף שבו נוצר / רשום עובד חדש:

ברוך הבא, הזן את פרטי העובד

שֵׁם
תְעוּדַת זֶהוּת
מספר איש קשר

ראשית - שימו לב שאנחנו מכניסים ספריית תגיות לדף ה- JSP שלנו - ה- טופס taglib - כדי לעזור בהגדרת הטופס שלנו.

הבא - ה תג ממלא כאן תפקיד חשוב; זה דומה מאוד ל- HTLM הרגיל תג אבל modelAttribute תכונה היא המפתח המציין שם של אובייקט המודל המגבה טופס זה:

זה יתאים ל @ModelAttribute בהמשך בבקר.

לאחר מכן - כל שדות קלט משתמשים בתגית שימושית נוספת מתג ה- Spring Form - צורה: קידומת. כל אחד מהשדות הללו מציין א נָתִיב תְכוּנָה - זה חייב להתאים לגטר / מגדיר של תכונת המודל (במקרה זה, מעמד העובד). כאשר העמוד נטען, שדות הקלט מאוכלסים על ידי Spring, שקורא לגטר של כל שדה הקשור לשדה קלט. בעת הגשת הטופס, הקוראים נקראים לשמור את ערכי הטופס לאובייקט.

לבסוף - מתי הטופס מוגש, המטפל ב- POST בבקר מופעל והטופס מאוגד אוטומטית ל- עוֹבֵד טענה שעברנו פנימה.

4. הבקר

עכשיו, בואו נסתכל על הבקר זה יטפל בקצה האחורי:

@Controller מחלקה ציבורית EmployeeController {@RequestMapping (value = "/ עובד", method = RequestMethod.GET) ציבורי ModelAndView showForm () {להחזיר ModelAndView חדש ("עובד בית", "עובד", עובד חדש ()); } @RequestMapping (value = "/ addEmployee", method = RequestMethod.POST) הגשת מחרוזת ציבורית (@Valid @ModelAttribute ("עובד") עובד עובד, תוצאת BindingResult, מודל ModelMap) {if (result.hasErrors ()) {return "שְׁגִיאָה"; } model.addAttribute ("שם", employee.getName ()); model.addAttribute ("contactNumber", employee.getContactNumber ()); model.addAttribute ("id", employee.getId ()); להחזיר "עובד תצוגה"; }}

הבקר מגדיר שתי פעולות פשוטות - ה- GET להצגת נתונים בטופס ו- POST עבור פעולת היצירה באמצעות הגשת הטופס.

שים לב גם שאם האובייקט שנקרא "עובד" לא יתווסף למודל, אביב יתלונן כאשר אנו מנסים לגשת ל- JSP מכיוון שה- JSP יוגדר לאגד את הטופס למאפיין המודל "עובד":

java.lang.IllegalStateException: לא BindingResult ולא אובייקט יעד רגיל לשם שעועית 'עובד' זמין כתכונת בקשה בכתובת o.s.w.s.s.BindStatus. (BindStatus.java:141) 

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

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

5. טיפול בשגיאות כריכה

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

להגיש מחרוזת ציבורית (@Valid @ModelAttribute ("עובד") עובד עובד, תוצאת BindingResult, מודל ModelMap)

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

java.lang.IllegalStateException: ארגומנט שגיאות / BindingResult הוכרז ללא תכונת המודל הקודמת. בדוק את חתימת שיטת המטפל שלך!

עכשיו - כבר לא זורקים חריג; במקום זאת, יירשמו שגיאות ב- BindingResult שמועבר ל שלח שיטה. בשלב זה אנו יכולים להתמודד עם שגיאות אלה במגוון דרכים - לדוגמה, ניתן לבטל את הפעולה:

@RequestMapping (value = "/ addEmployee", method = RequestMethod.POST) הגשת מחרוזת ציבורית (@Valid @ModelAttribute ("עובד") עובד עובד, תוצאת BindingResult, מודל ModelMap) {if (result.hasErrors ()) {return " שְׁגִיאָה"; } // האם משהו מחזיר "עובד תצוגה"; }

שימו לב כיצד, אם התוצאה מכילה שגיאות, אנו מחזירים תצוגה נוספת למשתמש על מנת להציג שגיאות אלה כהלכה. בואו נסתכל על השקפה זו - error.jsp:

אנא הכנס את הפרטים הנכונים

נסה שוב

6. הצגת עובד

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

מידע עובד הוגש

שם:$ {name}
מזהה:$ {id}
מספר איש קשר:$ {contactNumber}

דף JSP פשוט משתמש בביטויי EL כדי להציג ערכי מאפיינים של האובייקט עובד במודל.

7. בדיקת היישום

ניתן לפרוס את היישום הפשוט - למשל בשרת Tomcat - ולגשת אליו באופן מקומי:

// localhost: 8080 / spring-mvc-xml / עובד

זוהי התצוגה המכילה את הטופס הראשי - לפני פעולת ההגשה:

דוגמת טופס MVC באביב - הגש

לאחר המסירה הנתונים מוצגים:

דוגמת טופס MVC באביב - תצוגה

וזה הכל - דוגמא עובדת לטופס פשוט עם Spring MVC, עם אימות.

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

לבסוף, כפי שאמרתי ממש בתחילת המאמר, עליכם בהחלט להתעמק באביב MVC.