I should add that

> SimpleRequestWrapper fakeRequest = new SimpleRequestWrapper(request,
> link.toAbsoluteURI());

comes from ComponentEventLinkEncoderMethodAdvice#rewriteIfNeeded

On Mon, Feb 1, 2010 at 9:20 PM, Josh Canfield <joshcanfi...@gmail.com> wrote:
> Ok, I found the problem.
> The form action is created like so:
> void beginRender(MarkupWriter writer)
>    {
>        Link link =
> resources.createFormEventLink(EventConstants.ACTION, context);
>
> It then pulls the query parameters from the link and sticks them into
> hidden fields. The problem is that when you rewrite a url the first
> thing it does is converts the link toAbsoluteURI
>
> SimpleRequestWrapper fakeRequest = new SimpleRequestWrapper(request,
> link.toAbsoluteURI());
>
> which drops the containing the page context (t:ac) because it's in the
> links parameters, and the link is for a form.
> From LinkImpl:
> private String buildURI()
>    {
>        if (forForm || parameters == null)
>            return absoluteURI;
> ...
>
>
> So, the form is built without the page context...
>
> Seems mildly suspicious that the link knows it's for a form. The
> javadoc says: "Query parameters are never added to a forForm link."
> But I'm not coming up with a good reason why... if the form want's to
> treat the query params special then shouldn't it strip them off?
>
> Josh
>
>
>
> On Sun, Jan 31, 2010 at 5:45 AM, Jan Jirout <jir...@coroptis.com> wrote:
>> Hi,
>>
>> This is really code that I'm running. I really hope that I'm not wrong about
>> that. Code that I posted shouldn't affected result of filter. I'm using
>> tapestry version 5.1.0.5. I added simple project demonstrating the problem.
>>
>> In attachment is example application demonstrating that SimpleRequestWrapper
>> in my case somehow change the request.
>>
>> Let me closely describe used use case. I have component Discussion, this
>> discussion is used at different king of pages. In object Discussion there
>> should be inject object implementing ActionRemote. When user submit new
>> comment is called ActionRemote.onAction(CommentForm form). Injecting of
>> concrete ActionRemote implementation is done in main page (User) during
>> executing onActivate phase.
>>
>> In attached example, there are two ways how to demonstrate problem:
>>    * start application by "mvn jetty:run" and then access User page and
>> submit filled form. And you'll see exception saying that page context is
>> missing.
>>    * try to run test case UserTest.testSubmitForm() and you'll see same
>> exception
>>
>> I hope, that attached example will works in yours environment. Please try to
>> look at my example, it's possible that I doing something wrong.
>>
>> Jan
>>
>> Josh Canfield wrote:
>>>>
>>>> I tried to use following code:
>>>>
>>>>   public Request process(Request request, URLRewriteContext context) {
>>>>           return new SimpleRequestWrapper(request, request.getPath());
>>>>   }
>>>>
>>>> When I use this code then context of component event is even lost. I
>>>> didn't
>>>> find way how to create SimpleRequestWrapper with component even context.
>>>>
>>>
>>> This is surprising. I hate to ask, but are you really sure this is the
>>> code that is running? What you have here should be the equivalent to
>>> doing nothing. What version of tapestry are you using?
>>>
>>>
>>> Josh
>>>
>>> On Sat, Jan 30, 2010 at 2:56 PM, Jan Jirout <jir...@coroptis.com> wrote:
>>>
>>>>
>>>> Hi,
>>>>
>>>> thanks for answer.
>>>>
>>>> In my real application I change just pieces of path but it didn't work.
>>>>
>>>> I tried to use following code:
>>>>
>>>>   public Request process(Request request, URLRewriteContext context) {
>>>>           return new SimpleRequestWrapper(request, request.getPath());
>>>>   }
>>>>
>>>> When I use this code then context of component event is even lost. I
>>>> didn't
>>>> find way how to create SimpleRequestWrapper with component even context.
>>>>
>>>> Just in case when I call "return request;" from "process" method is
>>>> component event context correctly passed.
>>>>
>>>> If you would like to see example application I can send it to conference.
>>>>
>>>> regards
>>>>
>>>> Jan
>>>>
>>>>
>>>> Thiago H. de Paula Figueiredo wrote:
>>>>
>>>>>
>>>>> On Sat, 30 Jan 2010 19:58:34 -0200, Jan Jirout <jir...@coroptis.com>
>>>>> wrote:
>>>>>
>>>>>
>>>>>>
>>>>>> Hi All,
>>>>>>
>>>>>
>>>>> Hi!
>>>>>
>>>>>
>>>>>>
>>>>>> I have strange problem with URL rewriting. I'm changing path name in
>>>>>> URLRewriterRule. In following way:
>>>>>>
>>>>>>     public Request process(Request request, URLRewriteContext context)
>>>>>> {
>>>>>>             return new SimpleRequestWrapper(request, "somePath");
>>>>>>     }
>>>>>>
>>>>>
>>>>> The above rule rewrites *all* URLs to "somePath", losing any context or
>>>>> query parameters. You should use string manipulation to extract the
>>>>> original
>>>>> page name and then replace it with the new page name.
>>>>>
>>>>> If a request to "/original/1 arrives", your should rewrite it to
>>>>> "/new/1".
>>>>> You can use path.replace("/original/", "/new/") to do that, for example.
>>>>>
>>>>>
>>>>
>>>> ---------------------------------------------------------------------
>>>> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
>>>> For additional commands, e-mail: users-h...@tapestry.apache.org
>>>>
>>>>
>>>>
>>>
>>>
>>>
>>>
>>
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
>> For additional commands, e-mail: users-h...@tapestry.apache.org
>>
>
>
>
> --
> --
> http://www.bodylabgym.com - a private, by appointment only, one-on-one
> health and fitness facility.
> --
> http://www.ectransition.com - Quality Electronic Cigarettes at a
> reasonable price!
> --
> TheDailyTube.com. Sign up and get the best new videos on the internet
> delivered fresh to your inbox.
>



-- 
--
http://www.bodylabgym.com - a private, by appointment only, one-on-one
health and fitness facility.
--
http://www.ectransition.com - Quality Electronic Cigarettes at a
reasonable price!
--
TheDailyTube.com. Sign up and get the best new videos on the internet
delivered fresh to your inbox.

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
For additional commands, e-mail: users-h...@tapestry.apache.org

Reply via email to