Beispiel für ein JSF 2-UI-Fragment

Vor JSF 2.0 haben Sie eine verwendet Tag zum bedingten Rendern einer Reihe von JSF-Komponenten. Der Das Tag erstellt eine Ausgabekomponente als untergeordnetes Element der Komponente, die mit dem umschließenden Tag verknüpft ist. Eine Ausgabekomponente rendert die im Textkörper dieses Tags enthaltene Ausgabe, z. B. HTML-Markup.

Das ist bei JavaServer Pages (JSP) nützlicher als bei Facelets. Dies liegt daran, dass Facelets mit JSF-Markup gemischtes HTML anders verarbeitet als JSP. Aus diesem Grund bietet Facelets einen neuen Tag namens . Das UI-Fragment-Tag fügt eine neue UIComponent-Instanz in den JSF-Komponentenbaum ein. Alle Komponenten oder Inhaltsfragmente außerhalb dieses Tags werden vom Facelets-Ansichtshandler eingeschlossen. Alle Komponenten oder Inhaltsfragmente innerhalb dieses Tags werden als untergeordnete Elemente dieser Komponenteninstanz zum Komponentenbaum hinzugefügt. Es ist anwendbar, das UI-Fragment-Tag innerhalb eines zu verwenden und .

Die Vorschlagsdemo, die Sie in diesem Tutorial gesehen haben, wird das Konzept durchsetzen in Verbindung mit zur Anzeige der vorgeschlagenen Komponente. Der Tag haben die Möglichkeit, ein gerendertes Attribut für die bedingte Anzeige der Komponente und deren Verwendung bereitzustellen ist ein akzeptabler Weg, dies zu erreichen.

Lesen Sie auch:

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

1. Das benutzerdefinierte Tag (Komponente)

<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">
<ui:component>
	<ui:fragment rendered="#{tutorialNavigator.authorized(tutorialId)}">
		<h:outputLink value="#{tutorialNavigator.navigate(tutorialId)}">
			<h:outputText value="#{desc}"/>
		</h:outputLink>
	</ui:fragment>
</ui:component>
</html>

2. Der Deskriptor des benutzerdefinierten Tags (Komponente)

<?xml version="1.0" encoding="UTF-8"?>
<facelet-taglib>
	<namespace>https://javabeat.net/facelets</namespace>
	<tag>
		<tag-name>tutorial</tag-name>
		<source>tags/javabeat/tutorial.xhtml</source>
	</tag>
</facelet-taglib>

3. 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>
	<context-param>
		<param-name>facelets.LIBRARIES</param-name>
		<param-value>/WEB-INF/javabeat.jsf.taglib.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>

4. Die Ansichten

JPATutorial.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">
	<h1>JavaBeat JSF 2.2 Examples</h1>
	<h2>JSF2 UI Fragment Example</h2>
	You've Navigated Here ! You've The Privilege
</html>

JSFTutorial.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">
	<h1>JavaBeat JSF 2.2 Examples</h1>
	<h2>JSF2 UI Fragment Example</h2>
	You've Navigated Here ! You've The Privilege
</html>

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"
	xmlns:c="http://java.sun.com/jsp/jstl/core"
	xmlns:javabeat="https://javabeat.net/facelets">
<h:head>
	<title><h:outputText value="JavaBeat UI Param Example" /></title>
</h:head>
<h:body>
	<h1>JavaBeat JSF 2.2 Examples</h1>
	<h2>JSF2 UI Fragment Example</h2>
	<javabeat:tutorial tutorialId="jpa" desc="JPA Tutorial"/>
	#{' '}
	<javabeat:tutorial tutorialId="jsf" desc="JSF Tutorial"/>
</h:body>
</html>

5. Verwaltete Bohne

TutorialNavigator.java

package net.javabeat.corejsf;

import java.util.HashMap;
import java.util.Map;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;

@ManagedBean
@RequestScoped
public class TutorialNavigator {
	public static final Map<String,String> pages = new HashMap<String,String>();
	public static final Map<String,Boolean> authorities = new HashMap<String, Boolean>();

	public TutorialNavigator() {
		pages.put("jpa", "JPATutorial.xhtml");
		pages.put("jsf", "JSFTutorial.xhtml");
		authorities.put("jpa", true);
		authorities.put("jsf", false);
	}
	public String navigate(String tutorial){
		return pages.get(tutorial) != null ? pages.get(tutorial) : "";
	}

	public boolean authorized(String tutorial){
		return authorities.get(tutorial) != null ? authorities.get(tutorial) : false;
	}
}

6. JSF 2 UI-Fragment-Demo

Die folgenden Schnappschüsse zeigen Ihnen die Verwendung von ui:fragment zum bedingten Anzeigen von Komponenten in Verbindung mit der Verwendung von ui:component zum Definieren eines benutzerdefinierten Tags.

Beispiel für ein JSF 2-UI-Fragment1

  • Der Link zum JavaServer Faces (jsf)-Tutorial wird nicht angezeigt, da das in der Tutorial-Komponente (benutzerdefiniertes Tag) als ausgewertet wurde FALSCH. Im Gegensatz dazu wurde das für das JPA-Tutorial ausgewertet WAHR.

Beispiel 2 für ein JSF 2-UI-Fragment

  • Sogar Sie haben die Möglichkeit, das zu nutzen gerendert Attribut, das von bereitgestellt wird, aber Sie haben auch die Möglichkeit, ui:fragment zu verwenden, um das gleiche gewünschte Ergebnis zu erzielen.
  • Im Gegensatz zum Erstellen benutzerdefinierter Tags mit ui:composition stellt ui:component drei zusätzliche Attribute bereit; verbindlich, gerendert & Ausweis.

(wpdm_file id=27)

Kommentar verfassen

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

Nach oben scrollen