In Struts 2 ist es, wie in jedem anderen guten MVC-Framework auch, sehr einfach moeglich Texte zu lokalisieren. Darunter versteht man in Fachkreisen das Auslagern von Texten aus den JSP-Seiten in Propertie-Dateien. Das bietet den Vorteil der Internationalisierbarkeit. Englische Texte koennen in der Datei “package_en.properties” abgelegt werden und deutsche Texte in der Datei “package_de.properties”. Je nachdem welches Locale in der HTTP-Session abgelegt ist greift das Framework entweder auf die deutsche Datei oder auf die englische Datei zu.
Eine Propertie-Datei besteht aus Schluesseln und Werten
firstname=Vorname
lastname=Nachnam
Der Zugriff auf die Texte ist in Struts 2 mit dem folgenden Tag moeglich.
<s:text name="firstname"/>
Der Tag wird, sofern der Schluessel “firstname” in einer Propertie-Datei gefunden wird, durch den Wert “Vorname” ersetzt. Wenn der Schluessel in keiner Propertie-Datei gefunden wird, gibt das Framework den Schluessel als Text aus. Also “firstname”.
Struts 2 benutzt OGNL (Object-Graph-Navigation-Language) um auf die Werte einer Action-Klasse aus einer JSP Seite zu zugreifen. Irgendwann bin ich auf die Idee gekommen mit dynamischen Werten auf die Propertie-Dateien zu zugreifen. Mein erster naiver Versuch sah wie folgt aus.
<s:text name="%{dayOfWeek}"/>
Das hat leider nicht funktioniert, die Seite konnte nicht gerendert werden. Nach einigem Forschen in der OGNL Docu bin ich auf die richtige Loesung gekommen.
<s:text name="%{#attr['dayOfWeek']}"/>
Das funktioniert natuerlich nur wenn der Wert auf dem Stack liegt und die entsprechende Action-Klasse einen Getter “getDayOfWeek()” bereitstellt.
In JSF ist so ein dynamischer Zugriff auf Propertie Dateien aus einer JSP oder XHTML-Seite heraus nicht moeglich. In einer JSF Applikation wuerde man in der ManagedBean auf die Propertie-Datei zugreifen und den Wert ueber eine Variable zur Verfuegung stellen. So das die JSP/XHTML-Seite ueber die Variable Zugriff erlangt.
Das Ergebniss waere das selbe. Jedoch finde ich die Loesung mit OGNL viel eleganter.