PDA

View Full Version : Generics و ValueBinding



achilles
شنبه 29 اردیبهشت 1386, 15:00 عصر
سلام
فرض کنید یک مجموعه کلاس دارید که هر کلاس نمایانگر یک Table در دیتابیس است. که هر فیلد از جدول، در این کلاس با یک متغیر Private و متدهای Get و Set مخصوصش معین خواهد شد.
کلاس دیگری دارید به نام <collection<T که می تواند کلکسیونی از هر کدام از کلاسهای فوق باشد.

اکنون می خواهید یک شئ از کلاس <collection<T را به یک جدول HtmlTable داخل یک صفحه ی JSF، از داخل جاوا Bind کنید به گونه ای که هر سطر از جدول، یک آیتم T از collection را نمایش دهد.

چگونه اینکار را می کنید؟

unhandled_event
شنبه 29 اردیبهشت 1386, 22:16 عصر
با سلام

منظور ، Binding تا چه درجه اییه ؟ آیا یک entity object دارین که باید بین سرور و کلاینت رفت و آمد کنه یا اینکه فقط در حد نمایشه ؟
چون احتمالا در برنامه های دسکتاپ و وب یک کمی فرق دارن.
یعنی دیتا باید بمحض تغییر کردن یا edit شدن توسط کاربر در collection ثبت بشه
یا اینکه بعد از زدن دکمه submit در کلاینت باید دیتا مثلا از یک viewstate در سرور خونده بشه
پیاده سازی حالت اول در وب خیلی سخت بنظر میرسه. یک راه حل :
نیاز به کمی کد جاوا اسکریپت هست (مدل ajax ) آبجکت xmlhttprequest که در کلاینته و جاوا اسکریپته دیتای تغییر کرده رو برای سرور (یک jsp یا سرولت یا jsf ) بصورت یک درخواست آسنکرون request میفرسته و در اونجا سرولت یا jsp مربوطه از روی پارامترهای درخواست بفهمه که این مربوط به یک binding هست و یا یک درخواست یا query جدید. که یا بره دیتا رو در collection بنویسه و یا query رو اجرا کنه ضمن اینکه کل collection در یک session state نگهداری میشه. و تطبیق entity object و collection هم زمان اجرا و بوسیه همون <T>
حتما در جاوا و jsf فریم ورکهایی هستند که با پیاده سازی این روشها کار رو راحت میکنن حتی کار با transaction ها رو .

achilles
یک شنبه 30 اردیبهشت 1386, 10:14 صبح
سلام

منظورم اینه که چرا این کد فقط TD خالی روی فرم میگذاره؟




//membership signature: membership(int _id, String _username, String _password)

ArrayList<membership> al=new ArrayList<membership>();
membership m=new membership(1,"MMsaffari","Password");
al.add (m);
membership m2=new membership(1,"MMsaffari","Password");
al.add (m);
membership m3=new membership(1,"MMsaffari","Password");
al.add (m);
membership m4=new membership(1,"MMsaffari","Password");
al.add (m);
membership m5=new membership(1,"MMsaffari","Password");
al.add (m);
membership[] ma=new membership[al.size ()];
al.toArray (ma);

Application app = FacesContext.getCurrentInstance ().getApplication ();
HtmlDataTable dt=new HtmlDataTable();
lblTbl.getChildren ().add (dt);
//dt.setValue(ma);
ValueBinding vb = app.createValueBinding ("#{dtVar}");
dt.setValue (ma);
//dt.setValueBinding ("df", vb);
dt.setVar ("dtVar");
dt.setBorder (1);

UIColumn column = new UIColumn ();
HtmlOutputText text = new HtmlOutputText ();
//ValueBinding vb = app.createValueBinding ("#{dtVar}");
text.setValueBinding ("dtVar._id", vb);
//text.setValue ("#{dtVar._id}");
column.getChildren ().add (text);
dt.getChildren ().add (column);

UIColumn col2 = new UIColumn ();
HtmlOutputText txt2 = new HtmlOutputText ();
//ValueBinding vb2 = app.createValueBinding ("#{dtVar}");
txt2.setValueBinding ("#{dtVar._username}", vb);
//text.setValue ("#{dtVar._username}");
col2.getChildren ().add (txt2);
dt.getChildren ().add (col2);

UIColumn col3 = new UIColumn ();
HtmlOutputText txt3 = new HtmlOutputText ();
//ValueBinding vb3 = app.createValueBinding ("#{dtVar}");
txt3.setValueBinding ("#{dtVar._password}", vb);
//text.setValue ("#{dtVar._password}");
col3.getChildren ().add (txt3);
dt.getChildren ().add (col3);

achilles
یک شنبه 30 اردیبهشت 1386, 12:03 عصر
درستش کردم!:عصبانی++::لبخند:

unhandled_event
یک شنبه 30 اردیبهشت 1386, 19:31 عصر
بهرحال این کدا نشون میدن که jsf خیلی از این کارایی رو که من فکر میکردم با کد نویسی زیاد و سخت باید انجام داد رو ساده تر میکنه.
هیچ رفرنس خوبی درموردش هست ؟

achilles
پنج شنبه 03 خرداد 1386, 17:20 عصر
بهرحال این کدا نشون میدن که jsf خیلی از این کارایی رو که من فکر میکردم با کد نویسی زیاد و سخت باید انجام داد رو ساده تر میکنه.
هیچ رفرنس خوبی درموردش هست ؟

من دارم JSF رو برای اولین بار تجربه می کنم و عدل هم گیر دادم به Visual Web Application!

هیچ منبع به درد بخوری که 4 تا تکه سورس برای خوندن داشته باشه و این سورسها هم معنی دار باشن، تا حالا ندیدم! نزدیک به 2 گیگابایت کتاب در مورد جاوا دارم که هیچ کدومش به درد نمی خوره. خود JAVADOC هم که اگر آدم نره سمتش راحت تره. حداقل وقتش رو بجای خوندن چیزی که با یک Ctrl+Space دستش میاد، صرف فکر کردن و سر هم کردن یک پازل می کنه!!

بعد از حل کردن اون مشکل، الان یه مشکل دیگه پیدا کردم!! StateSaving

من اگر بخوام StateSaving رو سمت کلاینت راه بندازم و TomCat هم کند نشه، چکار باید بکنم!!!؟!

به نظر خودم این رسیده که به سبک ASP.Net یکی دو تا Hidden input بگذارم روی فرمم و دستی مدیریتشون کنم. یعنی سمت کلاینت با جاوا اسکریپت و سمت سرور هم که دستم به محتویات اون فیلد Hidden از توی Request می رسه.

به طور پیش فرض، StateSaving توی NetBeans روی Server هست که این باعث میشه بعضی پارامترهای Request بعد از هر بار Form.Submit از بین برن!!! مثلاً اگر یک CheckBox بصورت معمولی روی فرم باشه با یک دکمه ی Submit موقع رفت و برگشت اطلاعاتش حفظ می شود، اما اگر همان Checkbox را به یک HtmlDataTable بایند BIND کرده باشید، اطلاعاتش را از دست خواهد داد...