نحوه validation سمت client - Developer
مدت زمان یادگیری : | |
انتظارات در پایان یادگیری این بخش : | |
تهیه کننده : | مسعود حسن نیا |
تاریخ نگارش : | ۱۴۰۰/۰۷/۱۷ |
نکته بسیار مهمی که در بحث Validation و Check Permission وجود دارد، این است که حتما هر دو مورد باید هم در بخش کلاینت و هم در بخش سرور پیاده سازی شوند. اگر فقط در بخش کلاینت پیاده سازی شوند، کاربر می تواند با یکسری کارها Validation و Check Permission ها را دور زد.
نحوه پیاده سازی validation در بک اند لایفری
برای این کار، به نسبت validation های که مد نظر هست، باید برای آن exception طراحی شود، که exception ها را در فایل service.xml ماژول service نوشته می شوند و پس از بیلد ماژول سرویس کلاس های اکسپشن ساخته می شود. بعد از ان در قسمت پیاده سازی های مربوط به موجودیت یا برنامه مثل ایجاد یک موجودیت جدید از این اکسپشن های برای بحت validaton توسط متدی(void) به نام validate که فقط اکسپشن پرتاب می کند، استفاده می شود.
مثال:
Validation که برای ایجاد یک نظر جدید در ماژول polls نوشته شده است را بررسی می کنیم:
Exception ها در لایه سرویس فایل sevice.xml(polls/polls-service/service.xml) بدین نحوه نوشته شده:
<exceptions>
<exception>DuplicateVote</exception>
<exception>QuestionChoice</exception>
<exception>QuestionDescription</exception>
<exception>QuestionExpirationDate</exception>
<exception>QuestionExpired</exception>
<exception>QuestionTitle</exception>
</exceptions>
پس از بیلد سرویس، به عنوان مثال در کلاس PollsQuestionLocalServiceImpl که در لایه سرویس ماژول نظر سنجی(polls) در مسیر زیر واقع است:
Src/main/java/com/liferay/polls/service/impl/PollsQuestionLocalServiceImpl.java
در متد addQuestion که یک نظر سنجی جدید ایجاد می کند، برای بحث validation از متد validate استفاده کرده که در داخل متد validate به نسبت شرایط های مختلف اکسپشن مربوط به ان پرتاب می شود.
نحوه ای پیاده سازی متد validate به این صورت است:
برای نمایش این اکسپشن ها به کاربر در صفحه های jsp، در قسمت مربوط به تگ form که برای ایجاد فرم استفاده میشه، در داخل این تگ از تگ liferay-ui:error استفاده می شود به عنوان مثال:
<aui:form method="post" name="fm">
<liferay-ui:error exception="<%= DuplicateVoteException.class %>" message="you-may-only-vote-once" />
<liferay-ui:error exception="<%= NoSuchChoiceException.class %>" message="please-select-an-option" />
</aui:form>
که در داخل exception نوع اکسپشن مشخص می شود و در قسمت message نوع پیامی که اگر کاربر با این اکسپشن برخورد کرد نمایش داده شود، مشخص می شود.
پیاده سازی validator در سمت کلاینت
نوشتن validation در سمت کلاینت به این صورت است که بعد از بیلد سرویس کردن لایه سرویس، در ماژول سرویس (در مثال مد نظر ما polls-service ) در مسیر:
src/main/resources/META-INF
فایلی به نام portlet-model-hints.xml وجود دارد(تنها فایل xml موجود در پوشه META-INF لایه سرویس که می توان آن را تغییر داد همین فایل هست) که در داخل این فایل می توان برای فیلد مدل ها(موجودیت) validator نوشت، مثلا اینکه حداقل یا حداکثر طول فیلد چقدر باشد، فیلد ضروری باشد یا نه، کاربر فقط مجاز به وارد کردن عدد باشد نه حرف و ... . نکته ی بعدی اینکه فقط با وارد کردن این validator ها داخل تگ field به صورت خودکار در بخش view (کلاینت) اعمال می شوند.
نکته : با زدن دکمه ترکیبی راست کلیک + ctrl روی مقدار name داخل تگ validator یا hint ، فایل xsd باز می شود که در داخل این فایل انواع validator ها و hint های نوشته شده را می توانید ببینید و از آنها استفاده کنید.