631
צפיות
צפיות
7
תשובות
תשובות
איך אפשר להעביר אוביקט לדף חדש ?
שלום, אני משתמש ב-JSP ו-SERVLETS למרות שהבעיה/פתרון כנראה לא קשורה לשפה.
ביצירת דף מסוים ביצעתי כל מיני שאילתות ב-database ואיחסנתי את התוצאות בתוך אוביקט ע"י request.setAttribute. בתוך הדף יש לינק לדף אחר שבו אני רוצה להשתמש באותו אוביקט במקום לגשת ל-database שוב.
הבעיה היא שבדף החדש אני לא מוצא את האוביקט (מן הסתם נוצר אוביקט request חדש והאוביקט שלי נמחק).
פתרון אחד הוא לאחסן את האוביקט ברמת session אבל אז אם המשתמש יפתח באותו session יותר מדף אחד עלול להיווצר בלבול בתוצאות (תקנו אותי אם אני טועה). מהו הפתרון ?
תודה,
יריב
7 תשובות
אני חושב שאין לך ברירה מלבד Session
*חושב* ! אל תתפוס אותי במילה
אז נחדד את השאלה
נניח שאתה רוצה לאפשר לבצע חיפוש כלשהו. החיפוש מחזיר 1000 תוצאות, אתה מן הסתם תיצור דפים של תוצאות (נניח 10 בכל דף).
בכל פעם שהמשתמש יבקש לראות את ה-10 תוצאות הבאות תבצע חיפוש מחדש ? יותר הגיוני להעביר איכשהו את אוביקט התוצאות מדף לדף עם פרמטר שאומר איזה תוצאות מתוך ה-1000 להציג.
מה אתם אומרים ?
תעביר דרך שורת הכתובת…
תסתכל על החיפוש בגוגל למשל, או יותר קרוב-כאן באתר.
מממ למה לא INPUT נסתר? עם הפרמטר…
להעביר את מה ?
החיפוש החזיר 1000 תוצאות.
ברור שאעביר את הפרמטר שאומר איזה תוצאות להציג אבל איך להעביר את 1000 התוצאות ? אם לא אמצא דרך לשמור את 1000 התוצאות בין הדפים השונים אצטרך לשמור את הפרמטרים של החיפוש ולחפש כל פעם מחדש.
1. למה 1000 תוצאות ?
2. אחרי שפתרנו את 1 נוכל לומר שהשרת יכול להסתדר עם שליפה של הרשומות.
אתה יכול לשמור את תוצאות החיפוש
אתה יכול לשמור את תוצאות החיפוש בצורה הבאה:
1. צור מזהה יחודי, נניח GUID.
2. צור קובץ / רשומה ב DB שבנוי בצורה הבאה:
חותמת זמן
SessionID
תוצאות החיפוש (יכולות להיות גם "מפורקות" לדפים)
3. שמור את הקובץ לתיקיה זמנית על השרת / את הרשומה ל DB
4. כאשר המשתמש מבצע חיפוש – תוסיף ל QueryString גם את ה GUID שיצרת בסעיף 1.
בכל דף תוצאות – אתה בודק מהו ה GUID, קורא את הקובץ ונותן את התוצאות.
פעם בשעה (או פעם ביום) – אתה דואג לנקות את הקבצים הזמניים שיצרת. כדי ליעל את התהליך אתה יכול ליצור להם שם שכולל בתוכו גם את חותמת הזמן בפורמט שיהיה לך נוח וקריא.
מקווה שעזרתי…