كيف أعرف إذا أنا في إعادة النشر?
سؤال
لقد قرأت في JSF المستندات التي ResponseStateManager
لديه isPostBack()
الأسلوب.كيف (و حيث) هل لي مثيل ResponseStateManager
?
المحلول
كيف أعرف إذا أنا في إعادة النشر?
يعتمد على JSF الإصدار.
في JSF 1.0/1.1, لا يوجد ResponseStateManager#isPostback()
طريقة متاحة.تحقق مما إذا كان javax.faces.ViewState
المعلمة موجود في طلب المعلمة خريطة متاحة من قبل ExternalContext#getRequestParameterMap()
.
public static boolean isPostback() {
ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
return externalContext.getRequestParameterMap().contains("javax.faces.ViewState");
}
في JSF 1.2 في الواقع استخدام ResponseStateManager#isPostback()
والذي بدوره فعلا يتحقق وجود javax.faces.ViewState
معلمة في طلب المعلمة الخريطة.
public static boolean isPostback() {
FacesContext context = FacesContext.getCurrentInstance();
return context.getRenderKit().getResponseStateManager().isPostback(context);
}
في JSF 2.0, بدلا من استخدام FacesContext#isPostback()
, الذي ظل يغطي في الواقع المندوبين ResponseStateManager#isPostback()
.
public static boolean isPostback() {
return FacesContext.getCurrentInstance().isPostback();
}
نصائح أخرى
في الواقع, قبل jsf1.2, isPostBack تم الحصول عليها من خلال requestScope الحالي مثيل FaceContext.
منذ JSF1.2 ResponseStateManager (مساعد فئة StateManager أن يعرف التقديم المحددة التكنولوجيا المستخدمة لتوليد استجابة ، المفرد فئة مجردة, المباعة من قبل RenderKit.)
خلال استعادة عرض المرحلة من دورة الحياة ، ViewHandler باسترداد ResponseStateManager كائن من أجل اختبار ما إذا كان طلب إعادة النشر أو طلب أولي.
إذا طلب هو إعادة النشر, therestoreView طريقة ViewHandler يسمى.يستخدم هذا الأسلوب theResponseStateManager كائن إلى إعادة بناء مكون شجرة واستعادة الدولة.بعد الشجرة هو بناء الدولة المستعادة ، theViewHandler سبيل المثال ليست هناك حاجة إلى تقديم استجابة المرحلة يحدث مرة أخرى.
أن المادة satellite أعلاه (إنشاء مخصص تقديم عدة) يوضح كيفية تنفيذ/الحصول على ResponseStateManager خلال RenderKit (تعريف الوسم معالج تنفيذ الوسم الذي يجعل عنصر).
قد يكون هذا كافيا بالنسبة لك للحصول على الخاص بك ResponseStateManager في السياق ؟
بالنسبة JSF1.2
public static boolean isPostback(){
FacesContext context = FacesContext.getCurrentInstance();
return context != null && context.getExternalContext().getRequestParameterMap().containsKey(ResponseStateManager.VIEW_STATE_PARAM);
}