You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tapestry.apache.org by Joshua Jackson <jo...@gmail.com> on 2007/11/13 04:36:25 UTC
T4: Putting Tapestry files inside another folder
Dear all,
By default T4 files such as *.jwc, *.page, *.html are required to be
place inside WEB-INF/.
But I find this quite messy when there are other configuration from
another framework. Is there any way I can move these files to another
folder?
Thanks in advance
--
What you want today, may not exist tommorrow
Blog: http://joshuajava.wordpress.com/
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org
Re: T4: Putting Tapestry files inside another folder
Posted by Joshua Jackson <jo...@gmail.com>.
I kinda get the idea now that Tapestry by default looks for page &
component specification under WEB-INF. But what I don't get is why do
we have to create a class that implements
ISpecificationResolverDelegate and then configure it again in
hivemodule.xml instead of just configuring it in hivemodule.xml.
On 11/14/07, Andreas Andreou <an...@gmail.com> wrote:
> Also,
> http://wiki.apache.org/tapestry/PagesAndComponentsInWEB-INF
> http://wiki.apache.org/tapestry/SpeclessPagesInWEB-INF
--
What you want today, may not exist tommorrow
Blog: http://joshuajava.wordpress.com/
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org
Re: T4: Putting Tapestry files inside another folder
Posted by Andreas Andreou <an...@gmail.com>.
Also,
http://wiki.apache.org/tapestry/PagesAndComponentsInWEB-INF
http://wiki.apache.org/tapestry/SpeclessPagesInWEB-INF
On Nov 14, 2007 4:09 PM, Jim <op...@gmail.com> wrote:
> Hi Joshua,
>
> If you look through the configuration guide:
> http://tapestry.apache.org/tapestry4/UsersGuide/configuration.html,
> under "Application extensions", you'll find the following two entries in
> the table:
>
> org.apache.tapestry.specification-resolver-delegate
> ISpecificationResolverDelegate
> An object which is used to find page and component specifications that
> are not located using the default search rules. The use of this is
> open-ended, but is generally useful in very advanced scenarios where
> specifications are stored externally (perhaps in a database), or
> constructed on the fly.
>
> org.apache.tapestry.template-source-delegate
> ITemplateSourceDelegate
> An object which is used to find page or component templates that are not
> located using the default search rules. The use of this is open-ended,
> but is generally useful in very advanced scenarios where templates are
> stored externally (perhaps in a database), or constructed on the fly.
>
> While I disagree that wanting to put page specifications/templates in
> places other than the Tapestry defaults is a "very advanced scenario",
> at least we do have this option available to us. In both cases, it's
> just implementing the interfaces, so you're free to implement them
> however you want. I did go into the Tapestry source, myself, to see how
> the default implementors were doing it.
>
> I should be able to publish my own approach this weekend, if you're
> still having trouble and can wait a bit more.
> Thanks,
> Jim
>
>
>
> Joshua Jackson wrote:
> > Hi Jim,
> >
> > Thanks for replying. But isn't it possible to configure this just
> > using hivemodule.xml without having to create the classes you've
> > mentioned? Since I'm still new to this and do not have any idea how
> > would the class look like.
> >
> > Thanks
> >
> > On 11/13/07, Jim <op...@gmail.com> wrote:
> >
> >> Tapestry's HiveMind configuration provides two service points that can
> >> be implemented: tapestry.page.SpecificationResolverDelegate (to find
> >> page/component specifications), and
> >> tapestry.parse.TemplateSourceDelegate (to find page/component
> >> templates). Implementations of ISpecificationResolverDelegate and
> >> ITemplateSourceDelegate, respectively, can be plugged into these
> >> service-points.
> >>
> >> So I created a drop-in JAR with:
> >> 1. My own implementation of ISpecificationResolverDelegate
> >> 2. My own implementation of ITemplateSourceDelegate
> >> 3. META-INF/hivemodule.xml to tell HiveMind how to plug those
> >> implementations into Tapestry's configuration.
> >>
> >>
> >> Here's my slightly-censored hivemodule.xml:
> >>
> >> <module id="com.company...ModuleName"
> >> version="1.0.0" package="com.company...">
> >> <implementation service-id="tapestry.page.SpecificationResolverDelegate">
> >> <invoke-factory>
> >> <construct class="SpecificationResolverDelegate">
> >> <set-object property="context"
> >> value="service:tapestry.globals.WebContext" />
> >> </construct>
> >> </invoke-factory>
> >> </implementation>
> >>
> >> <implementation service-id="tapestry.parse.TemplateSourceDelegate">
> >> <invoke-factory>
> >> <construct class="com.company...TemplateSourceDelegate">
> >> <set-object property="context"
> >> value="service:tapestry.globals.WebContext" />
> >> <set-object property="parser"
> >> value="service:tapestry.parse.TemplateParser" />
> >> <set-object property="resolver"
> >> value="service:tapestry.page.ComponentSpecificationResolver" />
> >> </construct>
> >> </invoke-factory>
> >> </implementation>
> >> </module>
> >>
> >>
> >> As for the implementations, I just used modified copies of Tapestry's
> >> default implementations. I inject the WebContext not just so I can
> >> create filepaths relative from the deployed application, but also so I
> >> can specify the paths for my templates/specifications via
> >> init-parameters in my web.xml, making the module useful in multiple web
> >> applications. You can also create default specifications on the fly if
> >> a specification file isn't found; by requiring specific conventions, you
> >> can code your implementations in such a way that *.jwc and *.page files
> >> need not exist. The implementations that ship with Tapestry should give
> >> you a pretty good idea as to how you can work in your own behavior.
> >>
> >> Jim
> >>
> >>
> >>
> >> ---------------------------------------------------------------------
> >> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
> >> For additional commands, e-mail: users-help@tapestry.apache.org
> >>
> >>
> >>
> >
> >
> >
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
> For additional commands, e-mail: users-help@tapestry.apache.org
>
>
--
Andreas Andreou - andyhot@apache.org - http://blog.andyhot.gr
Tapestry / Tacos developer
Open Source / JEE Consulting
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org
Re: T4: Putting Tapestry files inside another folder
Posted by Jim <op...@gmail.com>.
Hi Joshua,
If you look through the configuration guide:
http://tapestry.apache.org/tapestry4/UsersGuide/configuration.html,
under "Application extensions", you'll find the following two entries in
the table:
org.apache.tapestry.specification-resolver-delegate
ISpecificationResolverDelegate
An object which is used to find page and component specifications that
are not located using the default search rules. The use of this is
open-ended, but is generally useful in very advanced scenarios where
specifications are stored externally (perhaps in a database), or
constructed on the fly.
org.apache.tapestry.template-source-delegate
ITemplateSourceDelegate
An object which is used to find page or component templates that are not
located using the default search rules. The use of this is open-ended,
but is generally useful in very advanced scenarios where templates are
stored externally (perhaps in a database), or constructed on the fly.
While I disagree that wanting to put page specifications/templates in
places other than the Tapestry defaults is a "very advanced scenario",
at least we do have this option available to us. In both cases, it's
just implementing the interfaces, so you're free to implement them
however you want. I did go into the Tapestry source, myself, to see how
the default implementors were doing it.
I should be able to publish my own approach this weekend, if you're
still having trouble and can wait a bit more.
Thanks,
Jim
Joshua Jackson wrote:
> Hi Jim,
>
> Thanks for replying. But isn't it possible to configure this just
> using hivemodule.xml without having to create the classes you've
> mentioned? Since I'm still new to this and do not have any idea how
> would the class look like.
>
> Thanks
>
> On 11/13/07, Jim <op...@gmail.com> wrote:
>
>> Tapestry's HiveMind configuration provides two service points that can
>> be implemented: tapestry.page.SpecificationResolverDelegate (to find
>> page/component specifications), and
>> tapestry.parse.TemplateSourceDelegate (to find page/component
>> templates). Implementations of ISpecificationResolverDelegate and
>> ITemplateSourceDelegate, respectively, can be plugged into these
>> service-points.
>>
>> So I created a drop-in JAR with:
>> 1. My own implementation of ISpecificationResolverDelegate
>> 2. My own implementation of ITemplateSourceDelegate
>> 3. META-INF/hivemodule.xml to tell HiveMind how to plug those
>> implementations into Tapestry's configuration.
>>
>>
>> Here's my slightly-censored hivemodule.xml:
>>
>> <module id="com.company...ModuleName"
>> version="1.0.0" package="com.company...">
>> <implementation service-id="tapestry.page.SpecificationResolverDelegate">
>> <invoke-factory>
>> <construct class="SpecificationResolverDelegate">
>> <set-object property="context"
>> value="service:tapestry.globals.WebContext" />
>> </construct>
>> </invoke-factory>
>> </implementation>
>>
>> <implementation service-id="tapestry.parse.TemplateSourceDelegate">
>> <invoke-factory>
>> <construct class="com.company...TemplateSourceDelegate">
>> <set-object property="context"
>> value="service:tapestry.globals.WebContext" />
>> <set-object property="parser"
>> value="service:tapestry.parse.TemplateParser" />
>> <set-object property="resolver"
>> value="service:tapestry.page.ComponentSpecificationResolver" />
>> </construct>
>> </invoke-factory>
>> </implementation>
>> </module>
>>
>>
>> As for the implementations, I just used modified copies of Tapestry's
>> default implementations. I inject the WebContext not just so I can
>> create filepaths relative from the deployed application, but also so I
>> can specify the paths for my templates/specifications via
>> init-parameters in my web.xml, making the module useful in multiple web
>> applications. You can also create default specifications on the fly if
>> a specification file isn't found; by requiring specific conventions, you
>> can code your implementations in such a way that *.jwc and *.page files
>> need not exist. The implementations that ship with Tapestry should give
>> you a pretty good idea as to how you can work in your own behavior.
>>
>> Jim
>>
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
>> For additional commands, e-mail: users-help@tapestry.apache.org
>>
>>
>>
>
>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org
Re: T4: Putting Tapestry files inside another folder
Posted by Joshua Jackson <jo...@gmail.com>.
Hi Jim,
Thanks for replying. But isn't it possible to configure this just
using hivemodule.xml without having to create the classes you've
mentioned? Since I'm still new to this and do not have any idea how
would the class look like.
Thanks
On 11/13/07, Jim <op...@gmail.com> wrote:
> Tapestry's HiveMind configuration provides two service points that can
> be implemented: tapestry.page.SpecificationResolverDelegate (to find
> page/component specifications), and
> tapestry.parse.TemplateSourceDelegate (to find page/component
> templates). Implementations of ISpecificationResolverDelegate and
> ITemplateSourceDelegate, respectively, can be plugged into these
> service-points.
>
> So I created a drop-in JAR with:
> 1. My own implementation of ISpecificationResolverDelegate
> 2. My own implementation of ITemplateSourceDelegate
> 3. META-INF/hivemodule.xml to tell HiveMind how to plug those
> implementations into Tapestry's configuration.
>
>
> Here's my slightly-censored hivemodule.xml:
>
> <module id="com.company...ModuleName"
> version="1.0.0" package="com.company...">
> <implementation service-id="tapestry.page.SpecificationResolverDelegate">
> <invoke-factory>
> <construct class="SpecificationResolverDelegate">
> <set-object property="context"
> value="service:tapestry.globals.WebContext" />
> </construct>
> </invoke-factory>
> </implementation>
>
> <implementation service-id="tapestry.parse.TemplateSourceDelegate">
> <invoke-factory>
> <construct class="com.company...TemplateSourceDelegate">
> <set-object property="context"
> value="service:tapestry.globals.WebContext" />
> <set-object property="parser"
> value="service:tapestry.parse.TemplateParser" />
> <set-object property="resolver"
> value="service:tapestry.page.ComponentSpecificationResolver" />
> </construct>
> </invoke-factory>
> </implementation>
> </module>
>
>
> As for the implementations, I just used modified copies of Tapestry's
> default implementations. I inject the WebContext not just so I can
> create filepaths relative from the deployed application, but also so I
> can specify the paths for my templates/specifications via
> init-parameters in my web.xml, making the module useful in multiple web
> applications. You can also create default specifications on the fly if
> a specification file isn't found; by requiring specific conventions, you
> can code your implementations in such a way that *.jwc and *.page files
> need not exist. The implementations that ship with Tapestry should give
> you a pretty good idea as to how you can work in your own behavior.
>
> Jim
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
> For additional commands, e-mail: users-help@tapestry.apache.org
>
>
--
What you want today, may not exist tommorrow
Blog: http://joshuajava.wordpress.com/
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org
Re: T4: Putting Tapestry files inside another folder
Posted by Jim <op...@gmail.com>.
Joshua Jackson wrote:
> Dear all,
>
> By default T4 files such as *.jwc, *.page, *.html are required to be
> place inside WEB-INF/.
>
> But I find this quite messy when there are other configuration from
> another framework. Is there any way I can move these files to another
> folder?
>
> Thanks in advance
>
>
Hi Joshua,
Tapestry's HiveMind configuration provides two service points that can
be implemented: tapestry.page.SpecificationResolverDelegate (to find
page/component specifications), and
tapestry.parse.TemplateSourceDelegate (to find page/component
templates). Implementations of ISpecificationResolverDelegate and
ITemplateSourceDelegate, respectively, can be plugged into these
service-points.
So I created a drop-in JAR with:
1. My own implementation of ISpecificationResolverDelegate
2. My own implementation of ITemplateSourceDelegate
3. META-INF/hivemodule.xml to tell HiveMind how to plug those
implementations into Tapestry's configuration.
Here's my slightly-censored hivemodule.xml:
<module id="com.company...ModuleName"
version="1.0.0" package="com.company...">
<implementation service-id="tapestry.page.SpecificationResolverDelegate">
<invoke-factory>
<construct class="SpecificationResolverDelegate">
<set-object property="context"
value="service:tapestry.globals.WebContext" />
</construct>
</invoke-factory>
</implementation>
<implementation service-id="tapestry.parse.TemplateSourceDelegate">
<invoke-factory>
<construct class="com.company...TemplateSourceDelegate">
<set-object property="context"
value="service:tapestry.globals.WebContext" />
<set-object property="parser"
value="service:tapestry.parse.TemplateParser" />
<set-object property="resolver"
value="service:tapestry.page.ComponentSpecificationResolver" />
</construct>
</invoke-factory>
</implementation>
</module>
As for the implementations, I just used modified copies of Tapestry's
default implementations. I inject the WebContext not just so I can
create filepaths relative from the deployed application, but also so I
can specify the paths for my templates/specifications via
init-parameters in my web.xml, making the module useful in multiple web
applications. You can also create default specifications on the fly if
a specification file isn't found; by requiring specific conventions, you
can code your implementations in such a way that *.jwc and *.page files
need not exist. The implementations that ship with Tapestry should give
you a pretty good idea as to how you can work in your own behavior.
Jim
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org