كيفية التمييز بين إجراء JSF أو رابط URL المباشر الذي تم استدعاء الصفحة

StackOverflow https://stackoverflow.com/questions/3875743

  •  28-09-2019
  •  | 
  •  

سؤال

لدي موقف، لدي حبة جلسة مع قائمة، هذه القائمة أعرضها في جدول بيانات html.عندما يصل المستخدم إلى عنوان URL من المتصفح أو href العادي، لا بد لي من إظهار جميع السجلات.هناك إمكانية البحث عن البيانات أيضًا، حيث يجب أن أعرض القائمة التي تمت تصفيتها.الآن بعد قيام المستخدم بالبحث، تحتوي القائمة على سجلات تمت تصفيتها وبعد القيام بذلك يترك الصفحة لبعض الأشخاص الآخرين، والآن إذا قام المستخدم بالضغط على عنوان url أو استخدم القائمة للعودة إلى هذه الصفحة، حيث أن لدي هذه القائمة في جلسة الفول، لا يزال لدي القائمة التي تمت تصفيتها.

نظرًا لعدم وجود إجراء افتراضي في مفهوم JSF 1.1 أو 2.0 preRenderView، فمن الصعب مسح القائمة والحصول على البيانات غير المصفاة (جميع النتائج) مرة أخرى.حتى الحيل في طريقة getList() تفشل في إنجاز المهمة.

لقد خططت لاستخدام مستمع المرحلة، لأنه عندما يصل المستخدم إلى صفحة عبر href أو عنوان url في المتصفح، لا يحدث استدعاء مرحلة التطبيق.يمكنني تبديل المتغير المنطقي في حبة الجلسة الخاصة بي وفي getList() يمكنني تنفيذ بعض الحيل للتحقق من أنه كان عنوان url أو اضغط على href أو عن طريق زر الأمر.

آمل أن أكون قد أوضحت نفسي.باختصار، لا بد لي من تحديد ما إذا كان الطلب جاء مباشرة من href أو المتصفح أو الإجراء.إذا كان إجراء البحث يقوم بتصفية سجلات جدول البيانات، إذا لم يكن الأمر كذلك، فاحتفظ بذاكرة التخزين المؤقت للقائمة واستمر في إظهارها طالما لم يتم إجراء البحث.

فقط أرشدني سواء كنت أفعل الأشياء بالطريقة الصحيحة أو أفكر كثيرًا أو هل يمكنني القيام بذلك بطريقة أكثر كفاءة.

شكرا لك مقدما.النظام الأساسي الجيد هو jsf 1.1 في بوابة weblogic 10.3 .....

هل كانت مفيدة؟

المحلول

يتم استخدام إجراءات JSF 1.x بشكل افتراضي POST طريقة.الروابط المباشرة/الإشارات المرجعية/إلخ هي بطبيعتها GET طريقة.وبما أنه لا يوجد ResponseStateManager#isPostback() أو FacesContext#isPostback() في JSF 1.1، عليك تحديد طريقة الطلب بنفسك:

HttpServletRequest request = (HttpServletRequest) facesContext.getExternalContext().getRequest();
boolean postback = "POST".equalsIgnoreCase(request.getMethod());

أو تحقق من وجود معلمة معينة في خريطة معلمات الطلب، لكن لا يمكنني معرفة المعلمة التي تريد التحقق منها من أعلى الرأس.عليك أن تحدد ذلك بنفسك.

boolean postback = facesContext.getExternalContext().getRequestParameterMap().containsKey(SOME_KEY);

لو postback يكون true, ، ثم يتم استدعاء إجراء JSF.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top