<fmt:message> außerhalb von JSP

Status
Nicht offen für weitere Antworten.

shadow

Aktives Mitglied
Hallo,

ich versuche mich jetzt schon seit einer halben Ewigkeit an einem Problem, das sicher ganz einfach zu lösen ist. Ich komm nur einfach nicht drauf:

In meinen JSP-Seiten benutze ich <fmt:message> für die Internationalisierung. Meine Anwendung hat aber auch ein paar Servlets, in denen ich auch Internationalisierung benötige. Nun fände ich es äußerst schick, wenn ich hier auf die selben Ressourcen zurück greifen könnte. Aus diesem Grund hab ich mal hinter die Kulissen von <fmt:message> geschaut, ist ja alles Open Source :wink: ...

Ergebnis: Man benötigt ein "LocalizationContext"-Objekt. Leider weiß ich nicht, wo ich das herbekommen soll... Wenn man noch tiefer im Source gräbt, sieht man: Man könnte man sich so ein "LocalizationContext"-Objekt besorgen, wenn man ein "PageContext"-Objekt hätte. Hat man aber nicht, da man nicht in einer JSP ist, sondern "nur" in einem Servlet. Ich dachte jetzt schon daran, das "PageContext"-Objekt irgendwo zwischen zu speichern, evtl. in der Session. Aber so ein Gebastel mach ich eigentlich immer ungern. Es müsste eine elegantere Lösung geben.

Idee?


Danke!
Stefan.
 

Kim Stebel

Bekanntes Mitglied
Probier's mal mit
Code:
PageContext pc = JspFactory.getDefaultFactory().getPageContext(this, req, resp, null, true, 4096, true);

Hab ich aber nicht getestet und wird normalerweise nur von JSPs aufgerufen.
 

shadow

Aktives Mitglied
Hey! So funktioniert es.
Ich hatte es auch schon so probiert, leider offensichtlich nicht ganz richtig, und zwar statt 4096 hab ich PageContext.DEFAULT_BUFFER genommen. Da kam aber statt einem PageContext-Objekt "null" zurück. Wie bist du auf die Zahl gekommen, Schuss ins Blaue?

Dann noch eine Frage: Ist das jetzt elegant? Einen PageContext zu erzeugen, obwohl "eigentlich" gar keine Page da ist? Bin da immer etwas eigen... ich sollte mich freuen, dass es so klappt :)

Danke!
 

Kim Stebel

Bekanntes Mitglied
Das war wirklich nur ein Schuss ins blaue...4kb ist ja nicht so unüblich als Puffergröße.
Elegant? Naja kommt drauf an wie groß deine Anwendung ist und ob du sie später leicht warten können willst. Ab einer bestimmten Größe würde ich eine MVC-Architektur verwenden und alle Views als JSPs realisieren.
 

shadow

Aktives Mitglied
Es ist bereits eine MVC-Anwendung und alle Views sind als JSP realisiert. An einer Stelle will ich jedoch im Controller beispielsweise eine E-Mail verschicken oder eine Text-Datei erzeugen etc... E-Mail und Text-Datei sollen natürlich in der jeweiligen Sprache sein, doch da stellte sich dann das Problem von oben...

Gibts vielleicht generell noch einen anderen Lösungs-Ansatz?
 

Rydl

Bekanntes Mitglied

fehlerfinder

Bekanntes Mitglied
shadow hat gesagt.:
statt 4096 hab ich PageContext.DEFAULT_BUFFER genommen. Da kam aber statt einem PageContext-Objekt "null" zurück
Bist du sicher, dass du PageContext.DEFAULT_BUFFER verwendet hast? Wenn du - wie gemeinhin leider üblich javax.servlet.jsp.* importiert und dann ein DEFAULT_BUFFER referenziert hast, kommt das aus javax.servlet.jsp.JspWriter (nicht javax.servlet.jsp.PageContext) und kennzeichnet dort einfach nur, ob ein default buffer verwendet werden soll, nicht aber dessen Größe.

Links:
1. http://java.sun.com/javaee/5/docs/api/javax/servlet/jsp/JspWriter.html#DEFAULT_BUFFER
2. http://java.sun.com/javaee/5/docs/a...ml#javax.servlet.jsp.JspWriter.DEFAULT_BUFFER

Dein Puffer hatte also die Größe '-1' - da passt halt nicht so arg viel rein ;-)
 

shadow

Aktives Mitglied
@rydl:

Dass das so geht wusste ich. Mein Vorhaben zielte allerdings darauf ab, genau die gleiche Logik zum ermitteln der Locale zu verwenden, wie <fmt:message/> aus der JSTL. Diese Taglib lässt nämlich noch bestimmte Konfigurationen zu, die ich dann nicht mitbekommen würde, wenn ich die properties komplett selbst lese...

@fehlerfinder:

Danke für das Raussuchen der Links. Tatsächlich habe ich habe JspWriter.DEFAULT_BUFFER verwendet. In PageContext finde ich nämlich gar kein DEFAULT_BUFFER. Ich bin nach folgendem Code gegangen:

http://java.sun.com/products/servlet/2.2/javadoc/javax/servlet/jsp/PageContext.html

Jetzt bin ich durcheinander....
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben