Howard, thanks for commenting!

I will add my comments to the comments this evening.

Geoff

On 12/1/05, Apache Wiki <[EMAIL PROTECTED]> wrote:
> Dear Wiki user,
>
> You have subscribed to a wiki page or wiki category on "Jakarta-tapestry 
> Wiki" for change notification.
>
> The following page has been changed by HowardLewisShip:
> http://wiki.apache.org/jakarta-tapestry/GeoffLongmanSandbox
>
> ------------------------------------------------------------------------------
>  In fact it's worse than this. There could be the case where an app had two 
> links, one in a form (not an HTML form!) that would cause Tapestry to find 
> the correct class and one that would not. When this is possible then the 
> stability of the application is suspect because all depends on whether the 
> first user clicked the right link. If the first click by the first user was 
> on the bad link, the whole app is broken until the servlet container is 
> restarted.
>
>  Currently the 
> [http://jakarta.apache.org/tapestry/tapestry/apidocs/org/apache/tapestry/pageload/ComponentClassProvider.html
>  ComponentClassProvider] uses a Hivemind chain to search for the page class. 
> Passed into this chain is an instance of 
> [http://jakarta.apache.org/tapestry/tapestry/apidocs/org/apache/tapestry/pageload/ComponentClassProvider.html
>  ComponentClassProviderContext] which contains:
> -  *the page name
> +  * the page name
> -  *the !INamespace for the page
> +  * the INamespace for the page
> -  *the page specification
> +  * the page specification
>
> - One member of the chain, 
> [http://jakarta.apache.org/tapestry/tapestry/apidocs/org/apache/tapestry/pageload/NamespaceClassSearchComponentClassProvider.html
>  NamespaceClassSearchComponentClassProvider], gets a list of packages {{{say 
> com.myfoo}}} by checking a property in the Namespace and then checks each 
> package for a class with a fully qualified name of the package with the page 
> name appended. If the !NamespaceClassSearchComponentClassProvider does not 
> locate a class it falls to other members of the chain and in most cases the 
> resulting class would be {{{org.apache.tapestry.html.BasePage}}}.
> + One member of the chain, 
> [http://jakarta.apache.org/tapestry/tapestry/apidocs/org/apache/tapestry/pageload/NamespaceClassSearchComponentClassProvider.html
>  NamespaceClassSearchComponentClassProvider], gets a list of packages, say  
> {{{com.myfoo}}}, by checking a property in the Namespace and then checks each 
> package for a class with a fully qualified name of the package with the page 
> name appended. If the !NamespaceClassSearchComponentClassProvider does not 
> locate a class it falls to other members of the chain and in most cases the 
> resulting class would be {{{org.apache.tapestry.html.BasePage}}}.
>
>  The problem arises because the page name may be a path like{{{
>  pages/MyPage
> @@ -53, +53 @@
>
>  com.myfoo.WEB-INF.pages.MyPage
>  }}}
>
> + HowardLewisShip: The third option is something I've never considered and 
> would consider banning outright.  Also, I believe that page "Page" and page 
> "pages/MyPage" are *distinct* pages, because they have distinct page names 
> ("Page" vs. "pages/MyPage").  The expectation is that page "Page" will be 
> class "com.myfoo.Page" and page "pages/MyPage" will be class 
> "com.myfoo.pages.MyPage".
> +
> - In all cases but the second, the page class Tapestry is searching for is 
> not found and usually !BasePage ends up being used. And if 
> {{{com.myfoo.pages.MyPage}}} has some properties that are refenced by, say, 
> an {{{ognl}}} expression in the template, the page will break.
> + In all cases but the second, the page class Tapestry is searching for is 
> not found and usually !BasePage ends up being used. And if 
> {{{com.myfoo.pages.MyPage}}} has some properties that are refenced by an OGNL 
> expression in the template, the page will break.
>
>  I think this problem also, in some cases, affects template lookup, but I 
> have not delved into that.
> +
>  === The Fix ===
>  It seems to me that the way this can be fixed so that Tapestry always looks 
> for and finds {{{com.myfoo.pages.MyPage}}} is to do a bit more processing on 
> the name passed in before handing things off to the !PageClassProvider. In 
> every case above, Tapestry sucessfully locates the specification 
> {{{/WEB-INF/pages/MyPage.page}}}. I think the fix would be to examine the 
> path part of the page name and lop off the leading parts that would cause the 
> class lookup to fail.
>
> @@ -64, +67 @@
>
>   *Compare with {{{/WEB-INF/servletname}}} , if that is a prefix, lop it off 
> and __STOP__.
>   *Compare with {{{/WEB-INF}}}, if that is a prefix, lop it off and __STOP__.
>   *If the above didn't result in a lopping, then the path is good.
> +
> + HowardLewisShip: Still digesting this.
>
>  There would appear to be a special case. That is{{{
>  <span jwcid="@PageLink" page="Page"/>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>


--
The Spindle guy.           http://spindle.sf.net
Get help with Spindle:   
http://lists.sourceforge.net/mailman/listinfo/spindle-user
Announcement Feed:    
http://www.jroller.com/rss/glongman?catname=/Announcements
Feature Updates:            http://spindle.sf.net/updates

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to