ساختن تگ سفارشي (Custom taglib)  در jsp  براي کپسوله سازي برخي پيچيدگي ها و همچنين انجام قسمتي از منطق برنامه که به طور متناوب در پروژه مورد استفاده قرار مي گيرد کاري مفيد است. به طور عادي براي دسترسي به متغيرهاي تعريف شده در تگ احتياج به اضافه کردن آن متغير به آبچکت PageContext و سپس دريافت آن در فايل jsp  داريم. اين کار در مواقعی بسياري خسته کننده است.

حال براي دسترسي مستقيم به متغيرهاي تعريف شده درون کلاس تگ سفارشي بايد از کلاس TagExtraInfo کمک بگيريم.

اين کلاس به ما اين امکان را مي دهد که با معرفي کردن متغيرهايي که مي خواهيم به طور مستقيم به آنها دسترسي داشته باشيم و با مشخص کردن حوزه ي دسترسي آن، به متغير تعريف شده دسترسي داشته باشيم.

براي اين کار بايد کلاس TagExtraInfo  را در فايل TLD تگ مربوطه بيفزاييم.

 

 

سپس ما کلاس  ExampleTagTEI را با ارث بري از کلاس javax.servlet.jsp.tagext.TagExtraInfo ايجاد مي کنيم :

 

 

همانطور که مشاهده مي کنيد در اين کلاس ما متد getVariableInfo را از کلاس پدر بازنويسي کرديم.

در اين متد بايد به تعداد متغير هايي که داريم يک آبچکت VariableInfo بسازيم و آن را درون آرايه از اين آبجکت ها قرار دهيم. سپس متد getVariableInfo اين آرايه را بر مي گرداند.

سازنده کلاس VariableInfo :

اجازه دهيد نگاهي به سازنده کلاس VariableInfo بياندازيم. پارامتر اول اسم متغيري است که ما آن را در jsp به طور مستقيم صدا ميزنيم.

پارامتر دوم نام کلاس متغبراست مثلا متغير variable3 از نوع StringBuilder  است که ما نام آن را به پارامتر دوم سازنده داده ايم.

پارامتر سوم آن محدوده دسترسي اين متغير است.محدوده هايي که ميتوانيم به اين متغير اختصاص بدهيم ۳ نوع است :

۱ – VariableInfo.AT_BEGIN که به ما اين امکان را مي دهد که قبل از اين تگ مربوطه را در jsp به کار ببريم به آن متغير دسترسي داشته باشيم.

۲- VariableInfo.AT_NESTED متغير درون بدنه تگ در دسترس است

۳-  VariableInfo.AT_END بعد از فراخواني تگ مربوطه در jsp  قابل دسترس است.

مثال :

 

 

همانطور که مشاهده مي کنيد بدون اينکه از کلاس PageContext اين متغير را بگيريم، به آن دسترسي داريم.

نکته : براي استفاده از اين متغير ها بايد از قبل، آنها را در کلاس اصلي تگ در آبجکت pageContext اضافه کرده باشيد.

 

نظرات کاربران

بالا