متصل کردن داده ها – Spring MVC

علاوه بر کنترلرهای ساده ای که نمونه آنها قبلا دیده شد، Spring کنترلرهای پیشرفته ای تدارک دیده است که امکان اتصال داده ها[۱] در آن مهیا می باشد. با استفاده از این امکان، شما می توانید مدل گردش کار را در برنامه های کاربردی وب و یا سایر فعل و انفعالات دیگر که نیاز به اتصال داده به پارامترهای درخواست وجود دارد ایجاد کنید. برای توضیح بیشتر، اجازه دهید نگاهی به یک مثال بیاندازیم. به درخواست زیر توجه کنید:

 

اتصال داده به ما اجازه “اتصال” پارامترهای درخواست را (show و email) به شی زیر می دهد:

 

درخواست ورودی شامل یک عنوان فیلم و آدرس ایمیل کسی است که مشتاق دریافت فیلم می باشد. با استفاده از شی SendInfo، ما می توانیم به راحتی یک ایمیل را به فرد ارسال کنیم. درخواست شامل تمام اطلاعات مورد نیاز می باشد، به طوری که تنها چیزی که ما باید انجام دهیم این است که در واقع نگاشتی بین اطلاعات ورودی و یک شی SendInfo داشته باشیم و سپس ایمیل مورد نظر را ارسال کنیم (البته برای این کار، باید از مولفه دیگری استفاده شود). کار نگاشت توسط کنترلرهای اتصال داده Spring انجام می شود.

Spring ما را به اتصال داده، تنها به شکل و یا فریم ورک خاص محدود نمی کند. ما می توانیم بدون پیاده سازی اینترفیس خاص، اتصال داده یک مدل پیچیده را انجام دهیم. بسیاری از این کارها با استفاده PropertyEditorها انجام می شود. سفارشی سازی اتصال داده نیز ممکن است که بعدا در مورد آن صحبت خواهیم کرد. PropertyEditors و اعتبارسنجی داده ها از جمله مفاهیمی هستند که نه تنها در زمان استفاده از فریم ورک، بلکه در زمان اعمال اتصال داده ها توسط Spring به شدت مورد استفاده قرار می گیرند.

قابلیت های مناسب برای چک باکس و دکمه های رادیویی در زمان اتصال داده ها

مشکلی که چک باکس ها دارند این است که گاهی اوقات به علت عدم تیک خوردن آنها، در ترجمه HTML ناپدید می شوند. هنگامی که یک چک باکس در یک صفحه HTML تیک نداشته باشد، در زمان ارسال فرم به سرور، مقداری برای آن، به عنوان بخشی از پارامترهای بسته درخواست HTTP فرستاده نمی شود. بیشتر زمان ها شما می خواهید شی دامنه خود را به گونه ای تعریف کنید که منعکس کننده وضعیت از انتخاب نشده چک باکس باشد. لیست هایی که با استفاده از دکمه های رادیویی مدل شده اند نیز همان رفتار را دارند. Spring قابلیت بازنشانی چک باکس بدون علامت را، حتی اگر مقدار آن به سرور ارسال نشده باشد، داراست.

برای اینکه به Spring بگوییم حتی اگر هیچ پارامتری در بسته درخواست برای چک باکس خاص یافت نشود، مقدار false را برای آن چک باکس تنظیم کند، (به عبارت دیگر، اگر چک باکس تیک نخورده باشد)، یک پارامتر اضافی (بهتر است به صورت مخفی تعریف شود) با پیشوند خط زیرین (“_”) تعریف کنید. با انجام این کار، شما می گویید: “چک باکس در فرم قابل مشاهده بود و من نیاز دارم، شی ای که به داده های فرم متصل شده است منعکس کننده وضعیت چک باکس باشد”.

در صورت تمایل، شما می توانید این رفتار را حذف کنید. تنها کافی است که در متد initBinder()کنترلرها، مقدار فیلد fieldMarkerPrefix موجود در ServletRequestDataBinder را null قرار دهید.

فیلدهای ایندکسی و نگاشتی: Map, List, Array

Spring اتصال داده ها را به فیلدهای ایندکسی مانند آرایه ها، لیست ها، و Map به سادگی پشتیبانی می کند. تا آنجا که ممکن است، این پشتیبانی مطابق با نمادهای موجود مانند آنهایی که مورد استفاده توسط زبان JSTL و یا EL است، خواهد بود. جدول زیر لیستی از نمونه هایی برای چگونگی اتصال فیلدها به مجموعه ای از اشیاء را نشان می دهد:

 

مجموعه عبارت توضیحات
Map (که با نام map در مدل وجود دارد) map[k1].namemap[‘k1’].name

map[“k1”].name

هر سه عبارت صحیح هستند. K1 کلیدی است که شی مورد نظر تحت نظر آن ذخیره می شود.
آرایه یا لیستی که شامل اشیائی از جنس Person است و تحت نام array ذخیره شده است array[0].namearray[‘1’].name

array[“2”].name

۰, ۱, ۲: این سه مقدار اندیس هایی هستند که اشیا را نگه می دارند. مطمئنا باید اندیس های لیست از صفر شروع شوند.

 

[۱] Data Binding

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *