Sunday, April 04, 2010

نان و حرف

دکتر علی شریعتی:

دموکراسی می گوید : رفیق، حرفت را خودت بزن، نانت را من می خورم

مارکسیسم می گوید : رفیق، نانت را خودت بخور، حرفت را من می زنم

فاشیسم می گوید : رفیق، نانت را من می خورم، حرفت را هم من می زنم و تو فقط برای من کف بزن

اسلام حقیقی می گوید : نانت را خودت بخور، حرفت را هم خودت بزن و من فقط برای اینم که تو به این حق برسد

اسلام دروغین می گوید : تو نانت را بیاور به ما بده و ما قسمتی از آن را جلوی تو می اندازیم، و حرف بزن، امّا آن حرفی را که ما می گویی.

Friday, December 21, 2007

اعتراض

اول سراغ یهودیان رفتند؛ من یهودی نبودم، اعتراض نکردم.


سپس به لهستان حمله کردند؛ من لهستانی نبودم، اعتراض نکردم.


آنگاه لیبرال ها را تحت فشار قرار دادند؛ من لیبرال نبودم، اعتراض نکردم.


بعد از آن، نوبت به کمونیست ها رسید؛ من کمونیست هم نبودم، اعتراض نکردم.


.... و سرانجام سراغ من آمدند؛ هرچه فریاد کردم و کمک خواستم، کسی باقی نمانده بود که اعتراض کند.


"برتولت برشت"

Labels:

Tuesday, October 11, 2005

My Personal Blog

به نام يزدان پاك

وضيحات فني :

-----------------------------------------

مقدمه:

Dynamic Form يك فرم Struts است كه در آن يك تعداد مقادير ورودي (ليست) توسط يك منطق كاري تعيين مي گردند .

يك مثال آن فرم خريد است كه در آن شما مي توانيد تعدادي شيئ را به سبد خريد خود اضافه نماييد.

احتمال رويت اين پيغام خطا وجود دارد

java.lang.IndexOutOfBoundsException: Index: 2, Size: 2

توضيحات:

وقتي شما از يك تعداد پويا ورودي استفاده مي كنيد شما احتمالا يكArray و يا ArrayList در يكForm Bean مانند اين خواهيد داشت :

private ArrayList apples;

فايل Struts JSP شما چيزي شبيه ذيل خواهد بود :

<logic:iterate name="applesForm" property="apples" id="bingBong" indexId="index">

Name<html:text name="bingBong" property="name" indexed="true"/>

Size<html:text name="bingBong" property="size" indexed="true"/>

logic:iterate>

با استفاده از يك Action كه Form Bean در Request آن ذخيره مي گردد ، پس از فشردن دكمه Submit به توالي ذيل منتهي مي گردد :

1-Form Bean ،Reset اجرا مي گردد.

2-BeanUtil فراخواني مي شود تا Form Bean را از مقادير پر كند.

3- Property Utils براي هر مقدار فرستاده شده از فرم صدا زده مي شود.

4-Property Util نياز دارد تا بداند داده ها از چه نوعي هستند و براي مثال اينگونه فراخواني كند : apples.get(0)

5- ازآنجاييكه FormBean ،Reset گرديده است ، ArrayList خالي است ، درنتيجه با پيغام Index Out of Bound بر مي خوريد.

-----------------------------------------

راه حل پيشنهادي:

3 راه حل براي رفع اين مشكل پيش نهاد گرديد كه يكي از آنها به نظر نگارنده كارآمدتر آمد كه در ذيل مي آيد فايل اصلي مقاله نيز در پيوست موجود است .

در FormBean تان يك متد به نام getBingBong قرار دهيد .بجاي bingBang مي توانيد هر نامي قرار دهيد .

اين متد وقتي ArrayList به اندازه كافي بزرگ نباشد مقاديري به آن وارد مي كند .

private ArrayList apples;

public Apple getBingBong(int index){

while(apples.size() <= index){

apples.add(new Apple());

}

return (Apple) apples.get(index);

}

آنچه بسيار مهم است :

در JSP شما بايد bingBong را به عنوان id براي Logic:Iterate انتخاب كنيد :

<html:form action="/editApples">

<logic:iterate name="applesForm" property="apples" id="bingBong" indexId="index">

Name<html:text name="bingBong" property="name" indexed="true"/>

Size<html:text name="bingBong" property="size" indexed="true"/>

<br>

logic:iterate>

<br>

<html:submit/><html:cancel/>

html:form>

راه حل ممكن :

Struts بايد بفهمد ArrayList شما چه نوع داده اي دارد تا Form bean را به خوبي پر كند .

در نتيجه اولين ايده اينست كه struts بهتر اينكه BeanUtils) استفاده از يك تابع getPropertyType را اجباري كند كه نوع ArrayList را بر مي گرداند .سپس آن يك Instance از نوع جديد مي سازد و آن را به Arraylist اضافه مي كند .

ايده بعدي انظار براي نسخه جديد جاوا و Typed Arrays است.[i]



[i] با توجه به حمايت Java 5 از اين نوع آرايه شايد بتوان روش هاي ساده تري را نيز پيدا نمود .