Dynamische JSF 2-Navigation anhand des From-Outcome-Beispiels

In den meisten Webanwendungen ist die Navigation nicht statisch. Der Seitenfluss hängt nicht nur davon ab, auf welche Schaltfläche Sie klicken, sondern auch von den Eingaben, die Sie bereitstellen. Beispielsweise kann die Übermittlung einer Anmeldeseite zu zwei Ergebnissen führen: Erfolg oder Misserfolg. Das Ergebnis hängt von einer Berechnung ab, nämlich davon, ob der Benutzername und das Passwort legitim sind.

Um eine dynamische Navigation zu implementieren, muss die Schaltfläche „Senden“ über eine verfügen Methode Ausdruck, ein Methodenausdruck in einem Aktionsattribut hat keine Parameter. Es kann einen beliebigen Rückgabetyp haben. Der Rückgabewert wird durch den Aufruf in einen String umgewandelt toString() Ab JSF 1.2 können Sie jeden Rückgabetyp verwenden. In jsf 1.1 musste eine Aktionsmethode einen Rückgabetyp haben Zeichenfolge. Insbesondere die Verwendung Aufzählungen ist eine nützliche Alternative, da der Compiler Tippfehler in den Aktionsnamen erkennen kann. Außerdem kann eine Aktionsmethode zurückkehren Null um anzugeben, dass dieselbe Ansicht erneut angezeigt werden soll.

Ein wichtiges Designziel von jsf besteht darin, die Präsentation von der Geschäftslogik zu trennen. Wenn Navigationsentscheidungen dynamisch getroffen werden, sollte der Code, der das Ergebnis berechnet, nicht die genauen Namen der Webseiten kennen müssen. JSF bietet einen Mechanismus zum Zuordnen logischer Ergebnisse, z Erfolg Und Versagen zu tatsächlichen Webseiten. Dies wird durch das Hinzufügen von Navigationsregeleinträgen in faces-config.xml erreicht.

Lesen Sie auch:

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

1. Verwaltete Bohne

IndexBean.java

package net.javabeat.jsf;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

@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(){
		// Do some processing
		if(this.username.equals("javabeat") && this.password.equals("javabeat")){
			return "success";
		}
		return "failure";
	}
}

2. Die Ansichten

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">
<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 - Action Outcome Example</h2>
		<h:form prependId="false">
			<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

<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 - Action Outcome Example</h2>
		<h:form prependId="false">
			<h:outputText value="Welcome Mr. #{indexBean.username}"/>
		</h:form>
	</f:view>
</h:body>
</html>

relogin.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 - Action Outcome Example</h2>
		<h:form prependId="false">
			<h:outputText value="Your Username or Password is wrong, please relogin"/>
			<h:commandButton value="Relogin" action="/index.xhtml"></h:commandButton>
		</h:form>
	</f:view>
</h:body>
</html>

3. JSF 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>/index.xhtml</from-view-id>
	<navigation-case>
		<from-outcome>success</from-outcome>
		<to-view-id>/welcome.xhtml</to-view-id>
	</navigation-case>
	<navigation-case>
		<from-outcome>failure</from-outcome>
		<to-view-id>/relogin.xhtml</to-view-id>
	</navigation-case>
</navigation-rule>
</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 Dynamic Navigation – Action-Outcome-Demo

Die folgenden Schnappschüsse zeigen Ihnen die ordnungsgemäße Verwendung der dynamischen Navigation durch Ergebniszeichenfolgen von Methodenausdruck.

Beispiel 1 für dynamische JSF 2-Navigation

Beispiel 2 für dynamische JSF 2-Navigation

Beispiel 3 für dynamische JSF 2-Navigation

(wpdm_file id=39)

Kommentar verfassen

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

Nach oben scrollen