قبل از اینکه به سراغ کدها در مد Edit برویم باید یک چیز درباره URL ها در اپلیکیشن های پورتلت به شما بگویم. بیشتر برنامه نویسهای وب عادت دارند از URL مستقیماً استفاده کنند. این چیزی نیست که بتوانید در یک اپلیکیشن پورتلت انجام دهید. در بیشتر موارد URL های پورتلت با عملکرد های پورتلت مرتبط شده اند که موجب می شود پردازش هایی انجام دهد. عملکردهای پورتلت را با استفاده از موضوع URL پورتلت خاص که ActionURL نامیده می شود تعریف می کنید. چون یک پورتلت تکه ای از یک صفحه است که در زمان اجرا به وسیله محتوی پورتلت فراهم شده است برنامه نویسها URL های خودشان را نمی توانند تعریف کنند چنان که در اپلیکیشن های وب معمول می توانند به جای آن URL ها باید به طور برنامه وار ایجاد شوند. این یک تغییر الگوست اما تقریباً انجام این انتقال آسان است. مهم است که بدانید محتویات URL ها باید به وسیله سرور پورتال در زمان اجرا تولید شود. چرا؟ تا هیچ تناقضی بین URL های تولید شده به وسیله پورتلت های مختلف به وجود نیاید.

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

اگر برنامه نویسها زودتر می دانستند که این پورتلت ها در همان صفحه قرار خواهند گرفت می توانستند URL ها را مطمئن کنند که دو قابلیت جستجو متفاوت هستند.اما آنها این را زودتر نمی دانستند که یک مدیر پورتال این کار را انجام خواهد داد و در نتیجه هر دو URL ها را جستجو می کنند و به /search در متن اپلیکیشن اشاره می کند. می توانید ببینید چگونه یک تناقض وجود خواهد داشت؟ کدام جستجوی اپلیکیشن فراخوانده می شود؟

به همین دلیل API پورتلت موضوعات URL را فراهم می کند. برنامه نویسها می توانند موضوعات URL ها را به طور برنامه وار ایجاد کنند و حتی پارامترها را در آنها تنظیم کنند. این به محتوای پورتلت اجازه می دهد تا ردیف های URL در زمان اجرا تولید شود و از هر تناقضی مثل آنچه که اشاره شد جلوگیری کند.

حالا که آن را از سر راه برداشتید آزادید تا مد Edit را اجرا کنید.

 اجرای مدEdit

چون اجرای مد Edit شامل یک فرم ساده می شود که کاربران آن را پر می کنند و ارائه می دهند شما به یک URL برای دکمه ارائه احتیاج دارید. باید با استفاده از API پورتلت یکی ایجاد کنید همانگونه که روش doEdit() که در لیست زیر نشان می دهد منعکس می کند.(برای اینکه بدانید چرا، بخش قبلی را ببینید).

 

لیست ۱٫۱ اجرای doEdit() در پورتلت

 

هنگامی که کدی را که در لیست ۱٫۱ است را اضافه می کنید به ورودی javax.portlet.PortletURL نیز نیاز دارید. یک ActionURL ایجاد می کنید و یک پارامتر به نام addName اضافه می کنید. سپس URL را در موضوع درخواست قرار دهید بنابراین در JSP که پردازش را به سوی آن ارسال خواهید کرد می تواند مورد استفاده قرار بگیرد.

Capture

اجازه بدهید در گام بعدی JSP را برای مد Edit اجرا نماییم. یک فایل در پوشه docroot به نام edit.jsp ایجاد کنید. به یاد آورید پیشتر با استفاده از پارامتر مقداردهی اولیه در پورتلت .xml به آن اشاره کردید.

 

لیست ۱٫۲ JSP برای مدEdit

 

 

در این کد ابتدا کتابخانه تگ را برای API پورتلت بیان می کنید همانطور که قبلاً انجام دادید. سپس URL را برای JSP با استفاده از تگ useBean مورد دسترس قرار می دهید تا آن را از موضوع درخواست بازیابی کنید و آن را در یک متغیر به نام addNameurl قرار می دهید.

بعد از این یک فرم ساده HTML هست. توجه داشته باشید که از یک تگ پورتلت به نام namespace در جلوی اسم فرم استفاده می کنید. شما این کار را به دلایلی انجام می دهید که شبیه هستند به اینکه چرا URL های پورتلت وجود دارند: می توانستید چندین فرم با همان نام در صفحه داشته باشیدو با هم متناقض باشند. با استفاده از این تگ به سرور پورتال اجازه می دهید یک ردیف منحصر بفرد جلوی نام فرم ضمیمه شود در نتیجه اطمینان حاصل می شود که هیچ پورتلت دیگری محتوی یک فرم با همان نام مثل مال خودتان نخواهد بود.

همچنین توجه داشته باشید که عملکرد فرم بر اساس ارزش عملکرد پارامتر نام درActionURL تنظیم شده است که در کلاس پورتلت ایجاد کردید و سپس به عنوان یک دانه در JSP بازیابی شد. این URL محتوی پارامتر addName است که با روش processAction() خواهد گرفت هنگامی که این فرم ارائه می شود در نتیجه پردازش می تواند به مکان درست هدایت شود.

صحبت درباره processAction() تنها عنصری است که پورتلتتان فاقد آن است. این روش بخشی از API پورتلت استاندارد است، این روش جایی را فراهم می کند که عملکردهای پورتلت می تواند پردازش شود. یک اجرای پیش فرض با API با استفاده از حاشیه نویسی فراهم می شود، اما شما آن را برای این پورتلت لغو خواهید کرد و اجرای خودتان را فراهم می کنید.

URL های پورتلت می تواند یکی از این دو نوع باشد:  RenderURL یا ActionURL. یک RenderURL به پورتلت می گوید تا دوباره خودش را ارائه کند. هر پارامتری برای پورتلت در آن زمان تعریف شده باشد اثر می پذیرد و پورتلت خود را تغییر می دهد. در مقابل یک ActionURL به سرعت پردازش را به روش ProcessAction() می فرستد جایی که منطق می تواند در مکانی باشد تا تعیین کند کدام عملکرد به وسیله کاربر انجام شده است و سپس پردازش مناسب می تواند اتفاق بیافتد. شما نسخه خود را اجرا می کنید بنابراین می توانید ببینید چگونه کار می کند و بعداً اجراهای دیگر (بهتر) را استفاده خواهید کرد. چون شما فقط یک عملکرد دارید منطق آن بسیار ساده است همانطور که در لیست بعدی می توانید مشاهده کنید.

لیست ۱٫۳ پردازش عملکرد یک پورتلت

 

همچنین نیاز دارید دو ورودی که در زیر آمده را نیز در بالای کلاس اضافه کنید:

 

این که پارامتر addName را در موضوع ActionRequest پورتلت جستجو می کند. شما این پارامتر را پیشتر به عنوان بخشی از یک ActionURL در روش doEdit() ایجاد کردید که به edit.jsp ارسال کردید و سپس بعنوان عملکرد فرم استفاده کردید.داشتن این نقطه عملکرد فرم در این URL پردازش را به چهار خط که در بیانیه if هدایت می کند. در پورتلت های بزرگتر این قطعه if ممکن است بزرگتر باشد(زیر این اجرا)چون چندین عملکرد وجود خواهد داشت که نامهایشان را می بایست چک کرد تا تعیین کنید کدام عملکرد لازم است تا اجرا شود.

پارامتر username در درخواست ایجاد می شود چون یک بخش در فرم است. سپس API پورتلت قابل دسترسی است تا برای یک کاربر خاص یک ترجیح را ذخیره کنید. این ترجیح name نامیده می شود و شما هر ارزشی که در این پارامتر بود را استفاده می کنید. بله می دانم شما اعتبار هیچ بخشی را انجام نمی دهید. به طور عادی این کار را قبل از ذخیره کردن انجام می دهید اما من می خواستم این مثال را تا حد امکان اده نگهدارم. این جفت کلیدی/ ارزشی حالا برای آن پورتلت / ترکیب کار ذخیره می شود.

آخرین کاری که این کد انجام می دهد برگرداندن مد پورتلت به مد View است. وقتی که این کار انجام می شود doview() فراخوانده می شود و کاربر پیغام “Hello<name>” را می بیند.

به طور خلاصه: حالا همه پردازش ها را برای مد Edit پورتلت در آن مکان داریم.روش doEdit() یک URL با عملکرد پارامتر اسم addName ایجاد می کند. سپس پردازش به فایل edit.jsp فرستاده می شود که از این پارامتر به عنوان یک فرم استفاده می شود. این فرم محتوی یک بخش است که در آن کاربران نامشان را تایپ می کنند. هنگامی که فرم ارائه می شود روش processAction پورتلت اجرا می شود و پارامتر name عملکرد را بازیابی می کند که ارزش  addName را دارد. چک کردن این ارزش شما را به کدی هدایت می کند که اسمی را ذخیره می کند که کاربر به عنوان یک PortletPreference پیشنهاد داده است.برای اینکه مثال را ساده نگه داریم شما هیچ اعتباری روی اطلاعات ارائه شده اجرا نمی کنید.

تا حالا کد را تکه تکه {تدریجی} دیده اید اما گاهی اوقات دیدن اینکه چیزها چگونه کار می کنند با نگاهی به همه آنها آسانتر است. لیست پایین همه پورتلت را نشان می دهد. من فقط می توانم همه مثال کد را اینجا در ابتدای کتاب نمایش دهم چون تقریباً ساده است (مطمئناً این منبع برای همه کتاب به صورت آنلاین در دسترس است)؛ به آن نگاه کنید تا مطمئن شوید که ساختار پورتلت را می فهمید.

لیست ۱٫۴ پورتلت کاملHello You

 

 

 

همانگونه که می بینید کدهای زیادی مورد نیاز نیست تا این قابلیت را اجرا کنید. اما در فصل های بعدی خواهید دید که پلتفرم لایفری چقدر چیزها را ساده تر می کند. برای الان تبریک! نوشتن اولین پورتلت را تکمیل کرده اید. اجازه بدهید در گام بعدی آن را راه اندازی و تست کنیم.

 

راه اندازی و تست پورتلت

هنگامی که این پروژه را با SDK پلاگین ها تولید کردید با اسکریپت Ant خود می آید که که ساخت و تولید پروژه را آسان می کند. اگر IDE ، Ant را پشتیبانی کند می توانید پروژه را از میان IDE راه اندازی کنید. اگر از یک IDE استفاده نمی کنید می توانید یک دستور ساده را اجرا کنید تا پروژه را راه اندازی کنید. این گامها را دنبال کنید:

دوباره سرور لایفری را روشن کنید، اگر از یک IDE استفاده می کنید و دستورالعمل ضمیمه A را دنبال می کنید می توانید این کار را از IDE انجام دهید. هنگامی که لایفری آغاز به کار کرد یک پنجره را برای کنسول لایفری باز نگهدارید در نتیجه می توانید ببینید که راه اندازی در حال رخ دادن است.

deploy را از اسکریپت ساخت Ant اجرا کنید. برای انجام آن از خط دستور (روی هر سیستم عامل)، دستور زیر را از پوشه پروژه صادر کنید:

 

 

هنگامی که پیغام BUILD SUCCESSFUL را دریافت کردید به کنسول لایفری توجه کنید. باید ببینید که در همان موقع پورتلت راه اندازی می شود.

پورتلت جدید از دیگر پورتلت ها که در لایفری راه اندازی شده اند غیر قابل تمایز است. به سایت http://localhost:8080 بروید و با استفاده از این کدکاربری و رمز عبور وارد شوید:

 

 

حالا آماده اید پورتلت را تست کنید و ببینید چگونه کار می کند:

  1. به Dockbar بروید و Add>More را انتخاب کنید. دسته بندی های زیادی از پورتلت نشان داده می شود. دسته بندی Sample را باز کنید؛ پورتلت Hello World در آنجا لیست شده است. در صورتیکه در آنجا نیست آن را به بیرون از لیست بکشید و در آخرین ستون سمت راست بیاندازید . اگر سریعاً پورتلت را بعد از اینکه آن را تولید کردید راه اندازی شود باید در آنجا باشد.
  2. پورتلت شما نمایش داده می شود. جعبه Add>More را با کلیک روی X قرمز در گوشه سمت راست ببندید.

پیغام پیش فرض “Hello!” در پورتلت نشان داده می شود. این روشی است که انتظار می رود کار کند: هنوز تنظیمات پورتلت تنظیم نشده است، در نتیجه پورتلت اسم شما را نمی داند.

  1. برای اینکه مد Edit را اجرا کنید روی دکمه در نوار عنوان پورتلت کلیک کنید که یک آچار روی آن دارد و سپس روی لینک Preferences کلیک کنید (پورتال لایفری مد Edit یک پورتلت را به عنوان یک آیتم منو Preferences نمایش می دهد.) شما به مد Edit پورتلت آورده شده اید و jsp نمایش داده می شود.
  2. نامتان را تایپ کنید و دکمه Add Name را کلیک کنید. تنظیمات پورتلتتان ذخیره می شود و چون مد پورتلت بازگشت به View در روش processAction تغییر دادید این پورتلت خود را در مد View مجدداً نمایش می دهد. چون الان تنظیمات پورتلت انجام شده است پورتلت نامی را که وارد کرده اید نمایش می دهد.
  3. احتمالاً از خود می پرسید: چرا پورتلتم در طبقه بندی Sample است و چگونه آن را تغییر دهم؟ ضمناً Hello World را در Hello You ایجاد کردمآیا می توانم نامش را تغییر دهم؟ جواب هر دو سوال بله است و آن را در گام بعدی انجام خواهید داد.

    ارسال نظر

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

بالا