Frage

Ich habe vor kurzem begonnen, einige JSF Arbeit zu tun - vor, dass ich immer PHP oder Python für Web-Entwicklung verwendet

.

Ich war etwas überrascht, dass JSF HTTP POSTs verwendet zu navigieren, wenn die h. Command Tag verwendet wird

Ich habe das command benutzen, da dies offenbar der richtige Weg ist JSF-Anwendungen zu bauen. Warum verwendet JSF POST für die Navigation? Was ist los mit GET? Ich kann nur annehmen, dass die Javascript wird automatisch von JSF für die OnClick Ereignisse erzeugt wird, um die maximale Länge für eine GET-Anfrage überschreiten könnte.

Ich habe bereits eine Reihe von Seiten, die h navigiert werden: command. Dies funktioniert Brunnen, bis ich den Browser-Zurück-Taste verwenden. Wie soll ich mich über die Zurück-Taste in JSF Handhabung?

Ich bin zu kämpfen, um zu verstehen, warum JSF um den POST zu bauen war. Es bricht bookmarking, Back-Paging und die Möglichkeit, Ihre Seite in Suchmaschinen indexiert haben.

War es hilfreich?

Lösung

Es wird nicht helfen Ihnen auf dem Client eine Verbindung aufzubauen, aber von outputLink .

Es gibt eine Umleitung Element für Navigationsregeln, die für einige refresh Probleme helfen kann.

<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>

Wenn alles andere fehlschlägt, können Sie die Umleitungs-URL selbst tun, wie sie in dieser Aktion:

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;
}

Caveats: Ich kann mich nicht erinnern, ob ich die URL richtig kodiert bin

.

Verschiedene 3rd-Party-Bibliotheken, unterschiedliche gluts von Funktionen. Ich bin mir nicht sicher, ob irgendetwas hat in JSF 2.0 in diesem Bereich getan worden, aber es könnte einen Blick.

wert sein

Andere Tipps

Yup. JSF ist um POST gebaut und es ist eines der größten Knackpunkte über JSF. Werfen Sie einen Blick auf die JAX-RS / Seam oder Feder für ein Lesezeichen getable Seiten.

Wie BalusC sagte auf seinem Blog , GET sollte für die Navigation zwischen Seite verwendet werden. Verwenden Sie h:outputLink für die Navigation.

Sie können seine PostRedirectGetListener lesen und es wird zurück / Refresh-Form Wiedervorlage Bestätigungsmeldung lösen.

ich Rat Sie folgendes beforePhase hinzuzufügen, um Teil-Ajax-Verarbeitung zu handhaben (falls zutreffend):

if(event.getFacesContext().getPartialViewContext().isAjaxRequest())
{
    return;
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top