Instead of using the event context, use a query parameter, so you don't
need to replicate in JS the logic in URLEncoder(Impl), which is *not* the
same as regular URL encoding.
On Fri, 18 Oct 2013 06:28:48 -0300, Davide Vecchi <d...@amc.dk> wrote:
In a Tapestry-generated web page I have some Javascript like this:
var arg = 'StringWithoutSpaces'; // Works only if no
spaces in this string.
var sLink = '/mypage.mycomponent:myevent/' +
encodeURIComponent(arg);
alert(sLink); // Just for debug.
location.href = sLink;
This works as I expected, that is in the Java class of the component the
method
onMyEvent(String arg)
gets called and it receives the value "StringWithoutSpaces" in arg.
The problem is that if the argument contains spaces (ASCII 32), for ex.
var arg = 'String With Spaces';
then I get the below exception.
I don't understand why, because from the Javascript alert box I can see
that the spaces were correctly encoded into %20, so when the browser
executes the Javascript statement
location.href = sLink;
the variable sLink has a value without any actual space:
/mypage.mycomponent:myevent/String%20With%20Spaces
So I'm wondering what is the right way to pass spaces - and possibly
other characters that might have the same problem as the space. I
thought a right way was to escape them with encodeURIComponent() in the
Javascript that makes the call, but it looks like it's not right.
The exception is:
java.lang.IllegalArgumentException
Input string 'String With Spaces' is not valid; the character ' ' at
position 7 is not valid.
Stack trace
org.apache.tapestry5.internal.services.URLEncoderImpl.decode(URLEncoderImpl.java:144)
org.apache.tapestry5.internal.services.ContextPathEncoderImpl.decodePath(ContextPathEncoderImpl.java:92)
org.apache.tapestry5.internal.services.ComponentEventLinkEncoderImpl.validateAndConstructComponentEventRequest(ComponentEventLinkEncoderImpl.java:377)
org.apache.tapestry5.internal.services.ComponentEventLinkEncoderImpl.decodeComponentEventRequest(ComponentEventLinkEncoderImpl.java:329)
org.apache.tapestry5.internal.services.linktransform.LinkTransformerInterceptor.decodeComponentEventRequest(LinkTransformerInterceptor.java:58)
org.apache.tapestry5.internal.services.ComponentEventDispatcher.dispatch(ComponentEventDispatcher.java:42)
org.apache.tapestry5.services.TapestryModule$RequestHandlerTerminator.service(TapestryModule.java:302)
org.apache.tapestry5.internal.services.RequestErrorFilter.service(RequestErrorFilter.java:26)
org.apache.tapestry5.services.TapestryModule$3.service(TapestryModule.java:902)
org.apache.tapestry5.services.TapestryModule$2.service(TapestryModule.java:892)
org.apache.tapestry5.internal.services.StaticFilesFilter.service(StaticFilesFilter.java:90)
...
...
--
Thiago H. de Paula Figueiredo
Tapestry, Java and Hibernate consultant and developer
http://machina.com.br
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
For additional commands, e-mail: users-h...@tapestry.apache.org