I just stepped through the sources to see where the URI get's
decoded to the activation context arguments, and found that the
o.a.t.internal.services.PageRenderDispatcher.dispatch invokes
convertActivationContext with the path info to convert it to
the activation context args.

convertActivationContext uses TapestryInternalUtils.urlDecode
which invokes URLCodec.decode. It seems that this causes the
problem, but I cannot say what exactly is the reason.

When I remove the invocation of TapestryInternalUtils.urlDecode
everything's fine...

Any help with this issue?

Thanx && cheers,
Martin


On Sun, 2007-06-17 at 23:01 +0200, Martin Grotzke wrote:
> On Tue, 2007-06-12 at 10:38 +0200, Ulrich Stärk wrote:
> > In case you are using Tomcat try adding URIEncoding="UTF-8" to your
> > connector definition in server.xml.
> I just tried that, but it does not solve the problem.
> 
> I have added a servlet filter that prints the requested uri to
> the std out, just to see what is the input for T5.
> 
> The URIEncoding="UTF-8" does not change what's printed by the
> filter, but the argument that's passed to my page class' onActivate
> is different.
> 
> Without URIEncoding="UTF-8":
> 
> [INFO ] 2007-06-17 22:52:37,956 http-8080-1 
> org.comp.proj.presentation.util.EncodingFilter.doFilter:
> - uri: /shopping24-shop/search/tr%C3%BCb
> - path: null
> 
> [INFO ] 2007-06-17 22:52:51,303 http-8080-1 
> org.comp.proj.presentation.pages.Search.onActivate:
> Got invoked args tr??b
> 
> With URIEncoding="UTF-8":
> 
> [INFO ] 2007-06-17 22:54:33,398 http-8080-1 
> org.comp.proj.presentation.util.EncodingFilter.doFilter:
> uri: /shopping24-shop/search/tr%C3%BCb
> 
> [INFO ] 2007-06-17 22:54:44,620 http-8080-1 
> org.comp.proj.presentation.pages.Search.onActivate:
> Got invoked args tr?b
> 
> 
> Is there anything else that I could do to get the correct
> decoding of the request parameters / uri?
> 
> Thanx && cheers,
> Martin
> 
> 
> 
> > 
> > Uli
> > 
> > On Mo, 11.06.2007, 23:13, Martin Grotzke sagte:
> > > Hi,
> > >
> > > I have currently an encoding issue, but am not really sure what's
> > > the reason for this.
> > >
> > > I have an url that contains a url encoded german umlaut (ü) in UTF-8
> > > and looks like the following:
> > >
> > > http://localhost:8080/app/search/%C3%BCbel (the %C3%BC represents the ü
> > > in UTF-8, this url is created by
> > > componentResources.createPageLink( "search", new Object[]{ _query } )
> > > in the submit method of the search page)
> > >
> > > Now, when I look in the onActivate(string) method, the string is not
> > > "übel" but it's "?bel", both printed via logging as when I inspect the
> > > variable during debugging.
> > >
> > > AFAICS the created url from the page link is correct in terms of utf-8
> > > encoding, but the parsed query string seems to be wrong, as it contains
> > > only the "?"...
> > >
> > > We have the following in our AppModule:
> > >
> > >     public void contributeRequestHandler(
> > >             OrderedConfiguration<RequestFilter> configuration,
> > >             @InjectService("TimingFilter")
> > >             final RequestFilter filter, @InjectService("Utf8Filter")
> > >             final RequestFilter utf8Filter ) {
> > >         configuration.add( "Timing", filter );
> > >         configuration.add( "Utf8Filter", utf8Filter ); // handle UTF-8
> > >     }
> > >
> > >     public RequestFilter buildUtf8Filter(
> > >             @InjectService("RequestGlobals")
> > >             final RequestGlobals requestGlobals ) {
> > >         return new RequestFilter() {
> > >             public boolean service( Request request, Response response,
> > > RequestHandler handler ) throws IOException {
> > >                 
> > > requestGlobals.getHTTPServletRequest().setCharacterEncoding(
> > > "UTF-8" );
> > >                 return handler.service( request, response );
> > >             }
> > >         };
> > >     }
> > >
> > >     public static PageResponseRenderer decoratePageResponseRenderer(
> > >             @InjectService("PageMarkupRenderer")
> > >             final PageMarkupRenderer markupRenderer,
> > >             @InjectService("MarkupWriterFactory")
> > >             final MarkupWriterFactory markupWriterFactory, final Object
> > > delegate ) {
> > >
> > >         return new PageResponseRenderer() {
> > >             public void renderPageResponse( Page page, Response response )
> > >                     throws IOException {
> > >                 MarkupWriter writer =
> > > markupWriterFactory.newMarkupWriter();
> > >                 markupRenderer.renderPageMarkup( page, writer );
> > >                 PrintWriter pw = response
> > >                         .getPrintWriter( "text/html; charset=UTF-8" );
> > >                 writer.toMarkup( pw );
> > >                 pw.flush();
> > >             }
> > >         };
> > >     }
> > >
> > > Is there anything wrong, or what am I missing?
> > >
> > > Thanx && cheers,
> > > Martin
> > >
> > >
> > >
> > 
> > 
> > 
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > For additional commands, e-mail: [EMAIL PROTECTED]
> > 
-- 
Martin Grotzke
http://www.javakaffee.de/blog/

Attachment: signature.asc
Description: This is a digitally signed message part

Reply via email to