سؤال

ولقد بدأت مؤخرا القيام ببعض الأعمال للمساهمة في المشروع - قبل ذلك لقد استعملت دائما PHP أو بيثون لتطوير الشبكة

.

وفوجئت إلى حد ما لتجد أن يستخدم JSF المشاركات HTTP للتنقل عندما ح: يستخدم commandLink العلامة

ولقد تم استخدام commandLink لأن هذا هو ما يبدو الطريقة الصحيحة لبناء التطبيقات للمساهمة في المشروع. لماذا JSF استخدام وظيفة للملاحة؟ ما هو الخطأ في GET؟ يسعني إلا أن نفترض أن جافا سكريبت التي يتم إنشاؤها تلقائيا من قبل JSF للأحداث عند_النقر يمكن أن يتجاوز الحد الأقصى للطول لطلب GET.

ولدي بالفعل عدد الصفحات التي يتم التنقل بينها باستخدام ح: commandLink. هذا وتعمل الآبار حتى يمكنني استخدام زر الرجوع في المتصفح. كيف ينبغي أن تذهب نحو التعامل مع زر العودة في JSF؟

وأنا تكافح من أجل أن نفهم لماذا كان JSF بناء حول POST. فإنه يكسر إشارة مرجعية، والعودة الترحيل والقدرة على صفحتك فهرستها في محركات البحث.

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

المحلول

وولن تساعدك على بناء وصلة على العميل، ولكن أن تكون على علم <لأ href = "http://java.sun.com/javaee/javaserverfaces/1.2_MR1/docs/tlddocs/h/ outputLink.html "يختلط =" نوفولو noreferrer "> outputLink .

وهناك عنصر إعادة توجيه لقواعد الملاحة التي يمكن أن تساعد لبعض القضايا التحديث.

<navigation-rule>
  <display-name>navBack</display-name>
  <from-view-id>/navBack.jsp</from-view-id>
  <navigation-case>
    <from-outcome>navTo</from-outcome>
    <to-view-id>/navTo.jsp</to-view-id>
    <redirect />
  </navigation-case>
</navigation-rule>

إذا فشل كل شيء آخر، يمكنك القيام بما URL إعادة توجيه نفسك، كما هو الحال في هذا العمل:

public String doAction() {
  System.out.println("Did some non-idempotent operation");
  FacesContext context = FacesContext.getCurrentInstance();
  ExternalContext extContext = context.getExternalContext();
  Application app = context.getApplication();
  ViewHandler viewHandler = app.getViewHandler();
  String url = viewHandler.getActionURL(context, "/navTo.jsp");
  url = url + (url.indexOf('?') < 0 ? '?' : '+') + "foo=bar";
  url = extContext.encodeResourceURL(url);
  try {
    extContext.redirect(url);
  } catch (IOException e) {
    throw new FacesException(e);
  }
  return null;
}

والمحاذير: لا أستطيع أن أتذكر إذا أنا ترميز URL بشكل صحيح

.

ومختلف مكتبات 3rd الطرف إضافة افراط من ميزات مختلفة. لست متأكدا إذا كان قد تم القيام به أي شيء في JSF 2.0 في هذا المجال، ولكن قد يكون من المفيد إلقاء نظرة.

نصائح أخرى

نعم. بنيت JSF حول وظيفة وانها واحدة من أكبر نقاط الخلاف حول JSF. نلقي نظرة على JAX-RS / التماس أو الربيع لصفحات GETable إشارة مرجعية له.

وكما قال BalusC على موقعه بلوق ، GET وينبغي أن تستخدم للملاحة بين الصفحات. استخدام h:outputLink للملاحة.

ويمكنك أن تقرأ له PostRedirectGetListener، وسوف يحل الظهر / التحديث التي رسالة تأكيد نموذج إعادة التقديم.

والمشورة I لك لإضافة ما يلي إلى beforePhase من أجل معالجة معالجة اياكس الجزئي (عند الاقتضاء):

if(event.getFacesContext().getPartialViewContext().isAjaxRequest())
{
    return;
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top