Beispiel für ein JSF 2-Ressourcenpaket

Wenn Sie eine Webanwendung implementieren, empfiehlt es sich, Nachrichtenzeichenfolgen an einem zentralen Ort zu sammeln. Dieser Prozess erleichtert die Konsistenz der Nachrichten und erleichtert vor allem die Lokalisierung Ihrer Anwendung für andere Gebietsschemas.

Die Nachrichtenzeichenfolgen werden in einer oder mehreren Dateien im Eigenschaftenformat gesammelt, und diese Dateien müssen die Erweiterung .properties tragen. Sie können das Nachrichtenbündel auf zwei Arten deklarieren. Der einfachste Weg besteht darin, eine Datei mit dem Namen faces-config.xml im WEB-INF-Verzeichnis Ihrer Anwendung bereitzustellen. Anstatt eine globale Ressourcen-Bundle-Deklaration zu verwenden, können Sie das Element f:loadBundle zu jeder JSF-Seite hinzufügen, die Zugriff auf das Bundle benötigt. In beiden Fällen kann auf die Nachrichten im Bundle über eine Zuordnungsvariable zugegriffen werden, die in beide Richtungen definiert ist.

Lesen Sie auch:

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

Wenn Sie eine Bundle-Datei lokalisieren, müssen Sie dem Dateinamen ein Gebietsschemasuffix hinzufügen: einen Unterstrich, gefolgt vom kleingeschriebenen, zweibuchstabigen ISO-639-Sprachcode (Sie finden eine Liste aller zwei- und dreibuchstabigen ISO-639-Sprachcodes). 639 Sprachcodes dabei Verknüpfung).

1. Verwaltete Bohne

IndexBean.java

package net.javabeat.jsf;

import java.util.Locale;

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

@ManagedBean
@SessionScoped
public class IndexBean {

	private String locale = "en";

	public String getLocale() {
		return locale;
	}

	public void setLocale(String locale) {
		this.locale = locale;
	}

	public String changeLocale(String locale){
		// Change the locale attribute
		this.locale = locale;
		// Change the locale of the view
		FacesContext.getCurrentInstance().getViewRoot().setLocale(new Locale(this.locale));
		return "";
	}
}

2. faces-cofig.xml

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>

3. 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"
	xmlns:c="http://java.sun.com/jsp/jstl/core">
<h:head>
	<title><h:outputText value="#{msg.title}"/></title>
</h:head>
<h:body>
	<h:form id="form">
	<f:loadBundle var="messages" basename="net.javabeat.jsf.messages"></f:loadBundle>
		<h1>
			<h:outputText value="#{msg.head}" />
		</h1>
		<h2>
			<h:outputText value="#{msg.example_name}" />
		</h2>
		<h:outputText value="#{msg.hello_message}"/>
		<br/>
		<br/>
		<h:outputText value="#{messages.inlineLoad}"/>
		<br/>
		<br/>
		<h:commandButton value="#{messages.german}" action="#{indexBean.changeLocale('de')}" rendered="#{indexBean.locale == 'en'}"/>
		<h:commandButton value="#{messages.english}" action="#{indexBean.changeLocale('en')}" rendered="#{indexBean.locale == 'de'}"/>
	</h:form>
</h:body>
</html>

4. Die Eigenschaftendateien

Der folgende Schnappschuss zeigt Ihnen die Bundle-Eigenschaftendateien, die sich bereits im Klassenpfad befinden.

Beispiel 1 für ein JSF 2-Nachrichtenpaket

  • Sehen Sie sich die angehängte ZIP-Datei an, um die Nachrichtendateien anzuzeigen.

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

6. JSF 2-Nachrichtenpaket-Demo

Die folgenden Schnappschüsse zeigen Ihnen das vollständige Szenario der Verwendung der Nachrichtenbündeleigenschaften zum Erreichen einer Lokalisierung. Die für diese Demonstration ausgewählten Sprachen sind Englisch und Deutsch.

Beispiel 2 für ein JSF 2-Nachrichtenpaket

  • Das Standardgebietsschema für die Anwendung ist Englisch, da der Browser standardmäßig auf Englisch eingestellt ist.
  • Sobald der Benutzer auf die deutsche Aktion geklickt hat, wird das Formular gesendet und die Aktion „Gebietsschema ändern“ wird ausgeführt.
  • Sobald die Aktion ausgeführt wurde, sollte der FacesContext das Gebietsschema ändern getViewRoot().setLocale.

Beispiel 3 für ein JSF 2-Nachrichtenpaket

  • Das Gebietsschema wurde geändert.
  • Die deutschen Eigenschaften wurden geladen und verwendet.
  • Durch Klicken auf die englische Aktion, die mit dem deutschen Gebietsschema angezeigt wurde, besteht bereits die Möglichkeit, zum englischen Gebietsschema zurückzukehren.

(wpdm_file id=20)

Kommentar verfassen

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

Nach oben scrollen