Wie legen Sie das Gebietsschema in einem benutzerdefinierten Struts 2 ActionMapper
Ich habe implementiert eine benutzerdefinierte ActionMapper, die ruft das Gebietsschema der URI (URI selbst, nicht der request-Parameter). Innerhalb ActionMapper.getMapping(), wie kann ich das Gebietsschema für die aktuelle Aktion?
Hier sind einige Ideen, die ich betrachtet habe:
- ActionContext.getCurrent().setLocale(). Leider scheint es, dass eine frische neue ActionContext wird erstellt, wenn die Aktion aufgerufen wird, und die locale auf den Standard zurückgesetzt.
- Setzen Sie den parameter request_locale, die verarbeitet werden, indem Sie die i18n-interceptor. Leider, die i18n-interceptor besteht auf Einstellung der locale nicht nur für die aktuelle Aktion, aber die aktuelle Sitzung zu, die eine Ausnahme wirft, denn die Sitzungen sind nicht aktiviert für meine Anwendung.
- Einen parameter einstellen und verarbeiten Sie in der Handlung selbst, durch die Umsetzung von setLocale(). Einfach, aber es bedeutet, dass keiner der Abfangjäger haben Sie Zugriff auf das Gebietsschema.
- Einen parameter einstellen und schreiben Sie eine interceptor (im Grunde das gleiche tun wie die i18n-interceptor, ohne dass session-Unterstützung). Scheint übertrieben für so ein einfaches Problem, nicht zu erwähnen, das Rad neu erfinden möchte.
Gibt es eine einfache Möglichkeit, dies zu erreichen?
- Wenn Sie das Gebietsschema in Ihrer gesamten Abfangjäger, ich denke, Sie sind stecken, neu zu erfinden das Rad mit einem custom-i18n-interceptor. Ich bin überrascht, dass der ActionContext bekommt neu - ich dachte, deine erste Idee würde gearbeitet haben, zu.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwendung der bereitgestellten I18nInterceptor, wenn Sie die param:
request_only_locale
statt
request_locale
request_only_locale speichert die locale nur für die Anfragen und berührt nicht die Sitzung.
Cheers,
Christian
Habe ich in der Tat am Ende Einstellung parameter "locale", und das umschreiben der i18n-Abfangjäger verwenden.
Seit Struts 2.1.1 Parameter in der ActionMapping sind getrennt von der request-Parameter. Die actionMappingParams interceptor nimmt diese Parameter und wendet Sie auf den Aktion-Objekt. Allerdings wollte ich meine i18n-interceptor zu konsumieren, die "locale" - Parameter und nicht führen Sie es durch, um die Aktion, Hier ist, wie ich es gemacht habe:
Diese custom-i18n-interceptor muß vor actionMappingParams in der interceptor-stack.