Beispiel für eine JSF 2-Umleitungsnavigation

Sie können die JSF-Konfiguration konfigurieren umleiten zu einer neuen Ansicht. Anschließend sendet die JSF-Implementierung eine HTTP-Umleitung an den Client. Die Umleitungsantwort teilt dem Client mit, welche URL er für die nächste Seite verwenden soll. Der Client stellt dann eine GET-Anfrage an diese URL. Die Umleitung kann manchmal sehr langsam sein, da ein weiterer Roundtrip zum Browser erforderlich ist. Die Umleitung gibt dem Browser jedoch die Möglichkeit, sein Adressfeld zu aktualisieren.

Ohne Umleitung bleibt die ursprüngliche URL unverändert, wenn der Benutzer von der Seite /login.xhtml zur Seite /welcome.xhtml wechselt. Bei der Umleitung zeigt der Browser die an NEUE URL.

Damit Ihre Route die Umleitungsnavigation unterstützt, müssen Sie den gewünschten Fall unten erfüllen:

  • Falls Sie die Navigationsregel nicht verwenden – über faces-config.xml – fügen Sie die Zeichenfolge hinzu ?faces-redirect=true zur Ergebniszeichenfolge.
  • Falls Sie eine Navigationsregel „Through faces-config.xml“ verwenden, fügen Sie danach ein Umleitungselement hinzu to-view-id.

Die Umleitungsfunktion ist eine JSF 2.0-Funktion, daher unterstützt jsf1.x diese Navigation nicht.

Lesen Sie auch:

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

1. Verwaltete Bohne

IndexBean.java

package net.javabeat.jsf;

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

@ManagedBean
@SessionScoped
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(this.username.equalsIgnoreCase("javabeat") &&
				this.password.equals("javabeat")){
			return "welcome";
		}
		else {
			FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("You're username or password isn't valid"));
			return "login";
		}

	}
}

2. Die Ansichten

loginx.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">
<h:head>
	<h:outputScript library="javax.faces" name="jsf.js"/>
</h:head>
<h:body>
	<f:view>
		<h1>JavaBeat JSF 2.2 Examples</h1>
		<h2>JSF2 Dynamic Navigation - Redirect Example</h2>
		<h:form prependId="false">
			<h:messages globalOnly="true" style="color:red"></h:messages>
			<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:commandButton>
		</h:form>
	</f:view>
</h:body>
</html>

willkommen.xhtml

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<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 Dynamic Navigation - Redirect Example</h2>
			<h:outputText value="Welcome Mr.#{indexBean.username}"/>
			<br/>
			<h:commandLink value="Logout" action="logout"/>
			#{' '}
			<h:commandLink value="Expenses" action="expensesView"/>
		</h:form>
	</f:view>
</html>

SpesenView.xhtml

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<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 Dynamic Navigation - Redirect Example</h2>
			<h:panelGrid columns="2">
				<h:outputText value="Oil"/>
				<h:outputText value="20 USD"/>
				<h:outputText value="House"/>
				<h:outputText value="50 USD"/>
				<h:outputText value="Schools"/>
				<h:outputText value="200 USD"/>
			</h:panelGrid>
			<br/>
			<h:commandButton value="logout" action="login?faces-redirect=true"/>
		</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>
<navigation-rule>
	<from-view-id>/welcome.xhtml</from-view-id>
	<navigation-case>
		<from-outcome>logout</from-outcome>
		<to-view-id>login</to-view-id>
		<redirect/>
	</navigation-case>
</navigation-rule>
</faces-config>

4. Der Bereitstellungsdeskriptor (web.xml)

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

Die folgenden Schnappschüsse zeigen Ihnen die Verwendung der Umleitung mit beiden ?faces-redirect=true an das Ergebnis angehängt oder a hinzugefügt nach to-view-id.

JSF 2-Umleitungsnavigationsbeispiel 1

  • Der Benutzer wird versuchen, sich mit dem Javabeat als Benutzernamen und Passwort beim System anzumelden.
  • Sobald der Benutzer die Anmeldeaktion aktiviert hat, wurde die Anmeldemethode aufgerufen und der Navigationshandler hat seinerseits das Ergebnis verarbeitet, das von der aufrufenden Methode zurückgegeben wurde.
  • Der Navigationshandler sollte die nächste Ansicht ohne Umleitung verarbeiten, da kein Indikator dafür angibt, dass die Navigation umgeleitet werden soll.

JSF 2-Umleitungsnavigationsbeispiel 2

  • Die nächste Ansicht (welcome.xhtml) wurde nach einem erfolgreichen Anmeldeszenario gerendert.
  • Beachten Sie, dass sich die Adresse des Browsers nicht geändert hat, da es sich bei der erstellten Navigation nicht um eine Umleitung handelt.
  • Für die Abmeldung, die auf der Seite „welcome.xhtml“ angezeigt wird, ist in „faces-config.xml“ eine Navigationsregel zugeordnet.
  • Sobald der Benutzer die Abmeldeaktion aktiviert hat, wird die Ansicht login.xhtml mit einer geänderten Adresse angezeigt.

JSF 2-Umleitungsnavigationsbeispiel 3

  • Der Abmeldeaktion, die in der Datei „costsView.xhtml“ verwendet wird, ist in der Datei „faces-config.xml“ keine Navigationsregel zugeordnet. Anstatt diese Navigation zum Erreichen einer Umleitung zu verwenden, haben Sie bereits eine Inline-Navigation mit „?faces-redirect“ bereitgestellt =true, was die gleiche Funktionalität zur Folge hat.

JSF 2-Umleitungsnavigationsbeispiel 4

  • Die beiden oben vorgestellten Abmeldeaktionen (entweder innerhalb von Welcome oder ExpensesView) sollten die gleiche Funktionalität haben und außerdem dazu führen, dass die Adresse geändert wird.

(wpdm_file id=42)

Kommentar verfassen

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

Nach oben scrollen