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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich habe gerade einige tests in meiner Spielplatz-Projekt und erkannte, dass es eigentlich möglich halten den Zustand der flash-Parameter auch wenn Sie BEKOMMEN wird die Seite wieder mit
{flash.keep}
. Das ist, wie die JSF-docs erklären:Hier haben Sie eine schöne basic-test-Fall:
Seite1.xhtml
page2.xhtml
Öffnen Sie einfach die erste Seite und klicken Sie auf die Schaltfläche, die Sie umleiten, um das zweite. Aktualisieren Sie dann die zweite Seite so oft wie Sie wollen und finden Sie die parameter beibehalten.
Getestet in Mojarra 2.2.6
Parameters: key - if argument key is the name of an entry previously stored to the flash on this traversal through the lifecycle via a call to putNow(java.lang.String, java.lang.Object), or to a set to the EL expression #{flash.now.<key>}, or to the request Map, to be promoted to the flash as if a call to put() or a set to the expression #{flash.<key>} was being called.
. Scheint ein EL-ähnliche Funktion.