Beispiel für einen JSF 2-Flash-Bereich

Um das Aufblähen des Sitzungsbereichs zu minimieren, ist es sinnvoll, den Anforderungsbereich so weit wie möglich zu nutzen. Ohne das Redirect-Element können Sie Request-Scope-Beans verwenden, die in der nächsten Ansicht angezeigt werden.

Bedenken Sie jedoch, was mit einer Weiterleitung passiert.

  • Der Client sendet eine Anfrage an den Server.
  • Die Anforderungsbereichszuordnung wird mit den Anforderungsbereichs-Beans gefüllt.
  • Der Server sendet den HTTP-Status 302 (vorübergehend verschoben) zusammen mit dem Umleitungsort an den Client. Dadurch wird die aktuelle Anfrage beendet und die Beans mit Anforderungsbereich werden entfernt.
  • Der Client stellt eine GET-Anfrage an den neuen Standort.
  • Der Server rendert die nächste Ansicht. Allerdings sind die vorherigen Request-Scope-Beans nicht mehr verfügbar.

Um dieses Problem zu lösen, stellt JSF 2.0 ein Flash-Objekt bereit, das in einer Anfrage gefüllt und in der nächsten verwendet werden kann. (Der Blitz Das Konzept ist dem Ruby on Rails-Webframework entlehnt.) Flash wird häufig für Nachrichten verwendet.

Die Art und Weise, wie die für den Zugriff auf verwendet werden könnte Blitz ist durch Aufrufen der getFlash() aus ExternalContext die bereits in der FacesContext-Singleton-Instanz vorhanden sind. Durch Aufruf von getFlash() Das zurückgegebene Objekt implementiert Map. Auf einer JSF-Seite verweisen Sie mit der Flash-Variablen auf das Flash-Objekt. Kurz gesagt: Im Flash-Bereich gespeicherte Variablen überleben eine Umleitung und werden anschließend verworfen.

Nachdem die Nachricht gerendert und die umgeleitete Ansicht an den Client übermittelt wurde, wird die Nachrichtenzeichenfolge automatisch aus dem Flash entfernt. Mithilfe des Ausdrucks können Sie einen Wert für mehr als eine Anfrage im Flash behalten #{flash.keep.message} Gibt den Wert des Nachrichtenschlüssels im Flash zurück und fügt ihn für einen weiteren Anforderungszyklus wieder hinzu.

Lesen Sie auch:

  • JSF 2-Tutorials
  • JSF-Tutorials
  • Einführung in JSF

1.Managed Bean

IndexBean.java

package net.javabeat.jsf.data;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;

@ManagedBean
@RequestScoped
public class IndexBean {
	private String username;
	private String password;

	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public String login(){
		if(username.equalsIgnoreCase("javabeat") &&
				password.equalsIgnoreCase("javabeat")){
			FacesContext.getCurrentInstance().addMessage(null,
					new FacesMessage(FacesMessage.SEVERITY_INFO, "You're logged in",""));
			FacesContext.getCurrentInstance().getExternalContext().getFlash().put("message",
					new FacesMessage(FacesMessage.SEVERITY_INFO, "You're logged in",""));
			return "index?faces-redirect=true"; // Redirect
		}
		else {
			FacesContext.getCurrentInstance().addMessage(null,
					new FacesMessage(FacesMessage.SEVERITY_ERROR, "You're not logged in",""));
			return "";	// Without Redirection
		}
	}
}

2. Die Aussicht

index.xhtml

<html xmlns="http://www.w3.org/1999/xhtml"
	xmlns:ui="http://java.sun.com/jsf/facelets"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:f="http://java.sun.com/jsf/core">
	<f:view>
		<h:form>
			<h1>JavaBeat JSF 2.2 Examples</h1>
			<h2>JSF2 Redirection &amp; Flash Example</h2>
			<h:messages globalOnly="true" errorStyle="color:red;" infoStyle="color:blue;"/>
			<br/>
			<h:outputText style="color:blue" value="Flash Variable Without Keep: #{flash.keep.message.summary}"/>
			<h:panelGrid columns="2">
				<h:outputText value="Enter Username: "/>
				<h:inputText value="#{indexBean.username}"/>
				<h:outputText value="Enter Password: "/>
				<h:inputText value="#{indexBean.password}"/>
			</h:panelGrid>
			<h:commandButton value="Login" action="#{indexBean.login}"/>
		</h:form>
	</f:view>
</html>

3. Faces-Konfigurationsdatei

faces-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<faces-config xmlns="http://xmlns.jcp.org/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
				http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_2.xsd"
	version="2.2">
<application>
	<resource-bundle>
		<base-name>net.javabeat.jsf.application</base-name>
		<var>msg</var>
	</resource-bundle>
</application>
</faces-config>

4. Der Bereitstellungsdeskriptor

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	id="WebApp_ID" version="2.5" metadata-complete="true">
	<context-param>
		<description>State saving method: 'client' or 'server'
						(=default). See JSF Specification 2.5.2
		</description>
		<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
		<param-value>client</param-value>
	</context-param>
	<context-param>
		<param-name>javax.faces.application.CONFIG_FILES</param-name>
		<param-value>/WEB-INF/faces-config.xml</param-value>
	</context-param>
	<servlet>
		<servlet-name>Faces Servlet</servlet-name>
		<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>Faces Servlet</servlet-name>
		<url-pattern>/faces/*</url-pattern>
	</servlet-mapping>
	<servlet-mapping>
		<servlet-name>Faces Servlet</servlet-name>
		<url-pattern>*.xhtml</url-pattern>
	</servlet-mapping>
	<listener>
		<listener-class>com.sun.faces.config.ConfigureListener</listener-class>
	</listener>
</web-app>

5. JSF 2-Umleitung und Flash-Variablen-Demo

Die folgenden Schnappschüsse zeigen Ihnen die Verwendung der Flash-Variablen zum Beibehalten der Nachrichten, auch wenn Sie die Umleitung zum Anzeigen der nächsten Ansicht verwendet haben.

Beispiel 1 für eine JSF 2-Flash-Variable

  • Der Benutzer hat das erfüllt Anmeldung Bildschirm zur Eingabe des Benutzernamens und Passworts.
  • Sobald der Benutzer die Anmeldeaktion aktiviert hat, wurde die Methodenbindung ausgewertet.

Beispiel 2 für eine JSF 2-Flash-Variable

  • Wenn Sie den Javabeat als Benutzernamen und Passwort eingegeben haben, geht das System davon aus, dass der Anmeldevorgang erfolgreich abgeschlossen wurde. Es muss eine Bestätigungsmeldung angezeigt werden, die Sie bestätigt Sie sind angemeldet.
  • Die bereits ausgeführte Anmeldeaktion hat Sie mit einer Umleitung zur gleichen Ansicht zurückgebracht. Durch die Umleitung werden die Karte mit Anforderungsbereich und die Gesichtsmeldung gelöscht.
  • Die Anzeige einer Bestätigungsnachricht tritt an ihre Stelle, da die Nachricht im gespeichert bleibt Flash-Variable. Sehen Sie sich die Login-Implementierung im an IndexBean.

JSF 2 Flash-Variable Beispiel 4

  • Der Benutzer hat ein ungültiges Passwort eingegeben. Die Gesichtsmeldung wurde angezeigt, da keine Umleitung erfolgt.
  • Nachdem die Nachricht gerendert und die umgeleitete Ansicht an den Client übermittelt wurde, wird die Nachrichtenzeichenfolge automatisch aus dem Flash entfernt. Die Meldung der Flash-Variablen wurde also nicht gerendert.

JSF 2 Flash-Variable Beispiel 3

  • Dieses Ergebnis wird so sein, wie Sie es gesehen haben, wenn Sie über die Verwendung von nachdenken #{flash.keep.message.summary} statt zu verwenden #{flash.message.summary}.

(wpdm_file id=46)

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Nach oben scrollen