Am 07.07.2010 um 22:02 schrieb Thiago H. de Paula Figueiredo:

> On Wed, 07 Jul 2010 15:35:51 -0300, Christian Riedel 
> <[email protected]> wrote:
> 
>> Of course, I have to call both methods and see whether the result is null or 
>> not. For rewritten incoming requests both decoders will return null as the 
>> page name is not known to tapestry:
>> 
>>        if (!componentClassResolver.isPageName(pageName))
>>            return null;
>> 
>> So in the end I have to parse it by myself again, right?
> 
> You don't have to parse it yourself as the service already implements it. I'm 
> not following you.
> 

Well, ok maybe I should provide my example:

In 5.2 your URLRewriter code has been deprecated in favor of the 
LinkTransformer. If I now want to add rewriting logic just for pages, I would 
contribute a custom transformer to "PageRenderLinkTransformer". 

The only example I could find for the new API was in Tapestry's tests: 
org.apache.tapestry5.integration.linktrans.services.AppPageRenderLinkTransformer

Unfortunately this transformer does what I said: it reproduces the logic from 
ComponentEventLinkEncoder to get locale and page name. You said I could use 
"the service", which is ComponentEventLinkEncoder so I did and got, of course, 
an exception:

public class HomePageRenderLinkTransformer implements PageRenderLinkTransformer 
{

    private ComponentEventLinkEncoder componentEventLinkEncoder;
    
    public HomePageRenderLinkTransformer(ComponentEventLinkEncoder 
componentEventLinkEncoder) {

        this.componentEventLinkEncoder = componentEventLinkEncoder;
    }

    @Override
    public PageRenderRequestParameters decodePageRenderRequest(Request request) 
{

        // StackOverFlow is coming next...
        final PageRenderRequestParameters decodePageRenderRequest = 
componentEventLinkEncoder.decodePageRenderRequest(request);
        
        return decodePageRenderRequest;
    }
   ...
}

So I just can't use it! :) In 5.1 it could have been possible to use the 
ComponentEventLinkEncoder, but It won't return anything else than the Index 
page...

    public Request process(Request request, URLRewriteContext context) {


        // request.getPath = /Home
        
        final PageRenderRequestParameters decodePageRenderRequest = 
componentEventLinkEncoder.decodePageRenderRequest(request);
        
        // decodePageRenderRequest.getLogicalPageName() = Index
        
        // parse the path once more by hand... 
    }


I hope you are with me now ;)



>> Maybe we just need a thin layer around PageRenderRequestParameters and 
>> ComponentEventRequestParameters that would resolve getPageName() by also 
>> looking into contributed URLRewriting rules.
> 
> This is not possible, as Tapestry doesn't know the logic inside rewriting 
> rules.
> 
>> Or the ComponentClassResolver returns true for the rewritten page name... I 
>> don't know what would be best :)
> 
> The URL ComponentClassResolver receives in the normal Tapestry flow is the 
> already rewritten one. All rewriting is done before the dispatchers are 
> executed, so they never receive the original, non-rewritten URLs. This should 
> be left as it is, as it simplifies the framework a lot.
> 
> -- 
> Thiago H. de Paula Figueiredo
> Independent Java, Apache Tapestry 5 and Hibernate consultant, developer, and 
> instructor
> Owner, Ars Machina Tecnologia da Informação Ltda.
> http://www.arsmachina.com.br
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to