Wie halten JSF flash-scope-Parameter auf Seite neu laden?

Ich benutze flash Geltungsbereich passieren, eine Einstellung Sache zwischen @viewscoped contollers. Aber wenn ich eine Seite neu laden auf einem von Ihnen, dann der flash-Karte ist leer, und die Einstellung-Objekt ist nicht initialisiert. Ist es möglich, flash-Rahmen auf Seite neu laden?

Mein source code zum speichern/abrufen von Einstellungen:

FistPage.xhtml

...
<p:commandButton value="next"
    action="#{firstPageController.transferConfig}"  
    process="@this" />
...

FirstPageController.java

@ManagedBean(name = "firstPageController")
@ViewScoped
public class FirstPageController {
...
public String transferConfig() {
FacesContext.getCurrentInstance().getExternalContext().getFlash().put("searchConfig",   searchConfig);
return "/secondPage.xhtml?faces-redirect=true";
}
...
}

SecondPage.xhtml

...
<h:outputLabel value="value">
    <f:event type="preRenderComponent" listener="#{secondPageController.onPageLoad()}"/>
</h:outputLabel>
...

SecondPageController.java

@ManagedBean(name = "secondPageController")
@ViewScoped
public class SecondPageController {
    ...
    public void onPageLoad() 
    {
        flash = FacesContext.getCurrentInstance().getExternalContext().getFlash();

        searchConfig = ((SearchFilterConfig) flash.get("searchConfig"));

        flash.putNow("searchConfig", searchConfig);

        flash.keep("searchConfig");
    }
    ...
}

Benutze ich Mojarra 2.1.29

Dank

  • Wo sind Sie Aufruf dieser Methode aus? Das wird nichts, wenn die parameter nicht schon in der Karte... Sind Sie mit der Aufzeichnung anderswo?
  • Ich habe gerade festgestellt, du bist nicht der Durchführung der Umleitung an alle für Ihre zweiten Blick. Können Sie finden die url in der Adresszeile geändert?
  • Ja, kann ich. Ich habe es im code oben. Das problem occurre nur, wenn ich ein reload der secondPage oder Aktion auf der secondPage mit update="@all"
  • Sie sind verschiedene Dinge. Erste ist ein GET Anfrage für die Ansicht, die zweite, die Sie sprechen, ist ein postback über die gleiche Ansicht. Zweite könnte vermieden werden, entweder halten Sie die flash-param oder Speicherung in @ViewScoped.
  • was ist der Punkt, der mit der flash-Bereich für einen gleichen-Seite-laden von einem @ViewScoped bean? Sie könnten nur speichern Sie die variable als Instanzvariable der bean, und es werden immer noch da sein und auf neu laden
  • Ich denke, wenn er darüber spricht, Seite Neuladen redet er darum, die Seite wieder manuell eingeben. Der Zustand der bean wird nicht erhalten werden dann, wie die @ViewScoped funktioniert nur für postbacks über die gleiche Ansicht...
  • Ich meine eine GET-Anfrage (F5 f.e.). Ich habe auch die Sprache-Taste auf der Seite wenn ich drücke, dass die ganze Ansicht wird aktualisiert, aber ich würde gerne zu halten, der Staat/config. Das problem ist die Ansicht können Sie durchführen, die aus anderen teilen der Anwendung und erhalten unterschiedliche configs. Also ich kann nicht mit dem session-scope.
  • Ein weiteres (schmutziger) option wäre der Aufhänger für die variable in der ThreadLocal-storage

InformationsquelleAutor Alex | 2014-07-29
Schreibe einen Kommentar