Another option is to inject the AssetSource service into your component, so
you can calculate the path passed to it.

On 5/17/07, Bill Holloway <[EMAIL PROTECTED]> wrote:

I thought that if a directory in the context didn't conflict with a
tapestry page name (like 'start'), then the url to that directory
would reference it ok.  For example, I have a context dir (named
'webapp' under src/main) that looks like this:

/src/main/webapp:
- css
      - main_style.css
- images
- js
- WEB-INF

If I direct my browser to http://localhost:8080/css/main_style.css, I
get a raw dump of the css file to the browser screen as I would
expect.  This .css file also gets properly injected if I use

@Inject
@Path ("context:css/main_style.css")
private Asset _mainStyle;

This is all properly working code (under Jetty at least :)

Bill

On 5/18/07, Martin Reurings <[EMAIL PROTECTED]> wrote:
> Hmmm, but that would generate a path to the webserver ('/static/....')
> root and not to the root of the context ('[appContext]/static/...'),
> plus it would bypass internationalization. Now I admit for css files the
> internationalization wouldn't matter but for skin-related images it
> might matter a lot and I would like to work it out within the @Inject
> method if possible.
>
> However, this idea has created a work-around for me, I'm now using the
> @inject @path combo to create to url's to the separate skins and I'm
> switching between them  based on the value of the property 'skin'. I
> think it could be improved upon:
> public class SiteDesign {
>
>     public final static String SKIN_PUBLISHER = "publisher";
>     public final static String SKIN_ADVERTISER = "advertiser";
>
>     @Parameter
>     private String skin = "publisher";
>
>     @Inject
>     @Path("context:static/css/advertiser/skin.css")
>     private Asset skin1CSS;
>
>     @Inject
>     @Path("context:static/css/publisher/skin.css")
>     private Asset skin2CSS;
>
>     public Asset getSkinCSS() {
>         if (skin.equalsIgnoreCase(SKIN_PUBLISHER)) return skin2CSS;
>         return skin1CSS;
>     }
>
>     public String getSkin() {
>         return skin;
>     }
>
> }
>
>
> Bill Holloway wrote:
> > If "skin" is a component property that's properly evaluated for you,
> > you can return the evaluated path as a page property to an Any
> > component in the template for the <link>:
> >
> > In TheComponent.java
> >
> > private String _skin // perhaps a parameter or resolved in onActivate?
> >
> > public String getStylesheetPath ()
> > {
> >     return "/static/css/" + _skin + "/color-scheme.css";
> > }
> >
> > In TheComponent.html:
> >
> > ...
> > <link t:type="any" element="link" rel="stylesheet" type="text/css"
> > href="prop:stylesheetPath" />
> > ...
> >
> > Bill
> >
> > On 5/17/07, Martin Reurings <[EMAIL PROTECTED]> wrote:
> >> We've created a simple template component to render the generic html
> >> layout
> >> of the page and handle things like the navigation in the near future.
> >> Since
> >> we've just started to use tapestry I am still trying to get my head
> >> around
> >> some of the things that would probably seem obvious to anybody else.
> >>
> >> I will have several CSS files linked in the head of my html file,
> >> since the
> >> url to a specific page is unknown and may be nested in a directory
> >> structure
> >> these files need to be absolute and should have the context root
> >> included.
> >>
> >> Now I've figured out how to do that using this:
> >>     @Inject
> >>     @Path("context:static/css/layout.css")
> >>     private Asset layoutCSS;
> >>
> >> The layout doesn't change, this is fine with me, but the color-scheme
> >> will
> >> change depending on which section of the site a user is browsing in
> >> and this
> >> introduces a variable in the directory structure. Now I've figured
> >> out how
> >> to use a property to pass that value on to my template component:
> >> <t:SiteDesign title="literal:xyz" skin="literal:advertiser" xmlns:t="
> >> http://tapestry.apache.org/schema/tapestry_5_0_0.xsd";>
> >>
> >> However, I have spent some time trying to figure out how to get this
> >> value
> >> injected into my accual url, as this doesn't work:
> >>     @Inject
> >>     @Path("context:static/css/${skin}/color-scheme.css")
> >>     private Asset skinCSS;
> >>
> >> Can anybody tell me what the preferred way of solving this issue
> >> would be?
> >>
> >> Thanx,
> >>
> >>  Martin
> >>
> >> --
> >> (   /'  _/_ __  _ _
> >> |/|///)(/(/(//_(-/
> >>         _/
> >> Website: http://www.windgazer.nl
> >>
> >
> >
>
> --
> (   /'  _/_ __  _ _
> |/|///)(/(/(//_(-/
>         _/
> E-mail: [EMAIL PROTECTED]
> Website: http://www.windgazer.nl
>
> "The trouble with doing something right the first time, is nobody
>  appreciates how difficult it was."
>                                                -- Unknown Artist
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>


--
"The future is here.  It's just not evenly distributed yet."

     -- Traditional

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




--
Howard M. Lewis Ship
TWD Consulting, Inc.
Independent J2EE / Open-Source Java Consultant
Creator and PMC Chair, Apache Tapestry
Creator, Apache HiveMind

Professional Tapestry training, mentoring, support
and project work.  http://howardlewisship.com

Reply via email to