Beispiel zum Entfernen der JSF 2-Benutzeroberfläche

Um herauszufinden, welcher Teil einer JSF-Ansicht einen Stack-Trace verursacht, möchten Sie manchmal die altehrwürdige Divide-and-Conquer-Strategie anwenden und Teile der Seite auskommentieren, um die problematische Komponente zu isolieren.

Etwas überraschend sind die XML-Kommentare sind für diesen Zweck nicht nützlich, z. B. wenn Sie eine Schaltfläche auf einer XHTML-Seite auskommentieren, wird JSF dies tun Verarbeiten Sie den Wertausdruckund platzieren Sie das Ergebnis als Kommentar in der generierten HTML-Seite. Falls der Ausdruck eine Ausnahme auslöst, helfen Ihnen die XML-Kommentare überhaupt nicht weiter. Seit JSF 2.0 gibt es einen neuen Tag zum Kommentieren der unerwünschten Komponenten. Anstatt Kommentare zu verwenden, stellt Ihnen JSF ein neues Tag zur Verfügung ui:entfernen.

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.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

@ManagedBean
@SessionScoped
public class IndexBean {
	private String evaluatedProperty = "Please Use ui:remove rather using of XML comments";
	private String evaluatedMessage = "Am I Evaluated";

	public String getEvaluatedProperty() {
		System.out.println("Even you're commenting out my associated output component, "
				+ "however it executes the getEvaluatedProperty."
				+ "Using ui:remove will cause this expression to be not executed");
		return evaluatedProperty;
	}

	public void setEvaluatedProperty(String evaluatedProperty) {
		this.evaluatedProperty = evaluatedProperty;
	}

	public String getEvaluatedMessage() {
		System.out.println("Evaluated");
		return evaluatedMessage;
	}

	public void setEvaluatedMessage(String evaluatedMessage) {
		this.evaluatedMessage = evaluatedMessage;
	}
}

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">
<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 UI Remove Example</h2>
		<h:form prependId="false">
			<ui:remove>
				<h:outputText value="#{indexBean.evaluatedMessage}"></h:outputText>
			</ui:remove>
			<!--
				<h:output value="#{indexBean.evaluatedProperty}"/>
			 -->
		</h:form>
	</f:view>
</h:body>
</html>

3. 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>

4. Faces-Konfigurationsdatei

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

5. Demo zum Entfernen der JSF 2-Benutzeroberfläche

Der folgende Schnappschuss zeigt Ihnen die Auswirkungen der Verwendung ui:entfernen Tag zum Verhindern der Ausführung und Wiedergabe unerwünschter JSF-Komponenten.

Beispiel zum Entfernen der JSF 2-Benutzeroberfläche

  • Wie Sie bemerkt haben, werden die beiden Ausgabekomponenten nicht gerendert, da die erste Komponente die verwendet hat ui:entfernen und der zweite hat die XML-Kommentare verwendet.
  • Aber wenn Sie sich die JVM-Konsole angesehen haben, erhalten Sie fast eine Nachricht von dieser Kommentarkomponente, die die XML-Kommentare verwendet.
  • Der Punkt, den Sie verstehen müssen, ist, dass ui:remove die Auswertung der JSF-Ausdrücke und der Wiedergabe verhindert. In der Zwischenzeit haben die XML-Kommentare den JSF-Ausdruck ausgewertet, ohne die Komponente zu rendern.

6. Konsolennachrichten

Die Meldung, die Sie erhalten, sobald Sie das Beispielprogramm ausführen, lautet wie folgt

Even you're commenting out my associated output component, however it executes the getEvaluatedProperty.Using ui:remove will cause this expression to be not executed

(wpdm_file id=44)

Kommentar verfassen

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

Nach oben scrollen