For now, I've defined a custom PortalLayout class which passes the correct locale to
the JSP (using an HttpServletRequestWrapper), and specify this class in my layouts file
using the (undocumentated) "layout-implementation" attribute. Seems to work.
Still unclear on the rationale for passing the original client request down.
p
| public class LocalizingLayoutImpl extends PortalLayout {
|
| public void assembleResponse(ServerRequest request,
| ServerResponse response,
| MarkupResult markupResult)
| throws ServletException, IOException
| {
| HttpServletRequest httpRequest = request.getContext().getClientRequest();
| HttpServletResponse httpResponse = response.getContext().getClientResponse();
| RenderContext renderCtx = getRenderContext(response.getStreamInfo(), request,
markupResult);
| LayoutDispatcher dispatcher = new LayoutDispatcher(renderCtx, new
LocalizedRequest(httpRequest, request), httpResponse, markupResult);
| dispatcher.include();
| }
|
| private class LocalizedRequest extends HttpServletRequestWrapper {
|
| private ServerRequest serverRequest;
|
| public LocalizedRequest(HttpServletRequest request, ServerRequest serverRequest)
{
| super(request);
| this.serverRequest = serverRequest;
| }
|
| @Override
| public Locale getLocale() {
| Locale locale = serverRequest.getLocale();
| if (locale == null) {
| return super.getLocale();
| }
| else {
| return locale;
| }
| }
|
| @Override
| public Enumeration getLocales() {
| final Locale[] locales = serverRequest.getLocales();
| if (locales == null) {
| return super.getLocales();
| }
| else {
| return new Enumeration() {
| private int index = 0;
|
| public boolean hasMoreElements() {
| return index < locales.length;
| }
|
| public Object nextElement() {
| return locales[index++];
| }
|
| };
| }
| }
|
| }
| }
|
View the original post :
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4003943#...
Reply to the post :
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&a...