Perhaps this would work Create an environmental object called Mode
public interface Mode { public String getMode(); // facebook or normal } Use tapestry's URL rewriting to rewrite http://myapp/facebook/page to http://myapp/page (see http://blog.tapestry5.de/index.php/2010/09/06/new-url-rewriting-api/) As the URL is rewritten, it pushes a mode onto the environment (either "facebook" or "normal") @Inject Environment environment String mode = getModeFromURL(); environment.push(Mode.class, new ModeImpl(mode)); When rendering links, use Environment.peek() to get the Mode from the environment and add the mode to each link URL if necessary. Components and Pages can then use the @Environmental annotation to inject the mode to determine which styles to include Then you get normal browsers to access http://myapp/page and facebook to access http://myapp/facebook/page On Wednesday, 28 March 2012, Juan Alba <juan.a...@condortech.com.ar> wrote: > Thanks Bob and Lance for the ideas and recomendations. > I think that Lance understood better my problem. The mode to change the css > I have it already solved with Thiago's suggestion. > Now my problem is that I can't define which stylesheet to use from server's > side because the only way to define it is knowing if the app is running on > an iframe or not. > > Before sending the mail with my problems I tried to use either suggestions > "Parameter" and "Cookies or Session". > > *Parameter:* > If I have the parameter I have to change every class in the webapp to add > the parameter if is set and don't loose it after the first link hit. > > *Cookies or Session:* > If they are set, It seems to work fine until I close the application > running in the iframe and open it in a new browser. It keeps all the > session or cookies and will use the wrong stylesheet. > > Any other idea? > > Thanks guys. > > On Wed, Mar 28, 2012 at 4:31 AM, Lance Java <lance.j...@googlemail.com >wrote: > >> All of the solutions mentioned on this thread assume that there is a way >> ofdetermining which "mode" your pages/components need to include styles >> for. >> >> From what you have said, it seems that you currently only know the "mode" >> clientside in javascript. >> >> I get the feeling that you may need to re-think your design slightly so >> that the "mode" is known on the serverside. This can be done by activation >> context, request parameter, URL, cookie, session attribute etc. >> >> On Tuesday, 27 March 2012, Juan Alba <juan.a...@condortech.com.ar> wrote: >> > Thanks for your help guys, now I am realizing that my real problem is >> > another one. It concerns more with the logic to know what style to load. >> > >> > My app can be used in the browser (regular way) or also as a Facebook >> App. >> > This means an iframe where everything is smaller, and the backgrounds >> need >> > to be similar to the one in Facebook (so it looks nicer). >> > I have done something in javascript to realize if the app is being used >> > embebed or used "regular way". But this is reloading all the styles so I >> > have a first sight of the default tapestry styles and then the new ones >> > (not nice at all), and there are some problems with the components >> styles, >> > so the solution is not really a good one. >> > >> > I am wondering if there is a css strategy or some way to load the style >> > according to where from I am visiting the app, regular way or facebook. >> > >> > >> > Thanks in advance for all your help. >> > >> > >> > >> > >> > On Tue, Mar 27, 2012 at 4:52 AM, Lance Java <lance.j...@googlemail.com >> >wrote: >> > >> >> Tapestry uses the ImportWorker to process @Import annotations >> >> >> >> >> >> http://tapestry.apache.org/5.3/apidocs/src-html/org/apache/tapestry5/internal/transform/ImportWorker.html >> >> >> >> You could quite easily write your own annotation (and worker) to do a >> >> similar job with your custom logic >> >> >> >> On Monday, 26 March 2012, Thiago H. de Paula Figueiredo < >> >> thiag...@gmail.com> >> >> wrote: >> >> > On Mon, 26 Mar 2012 12:00:03 -0300, kado < juan.a...@condortech.com.ar >> > >> >> wrote: >> >> > >> >> >> Hi, >> >> > >> >> > Hi! >> >> > >> >> >> My webapp now is loading the stylesheets in the Layout component in >> this >> >> >> way: >> >> >> >> >> >> @IncludeStylesheet({"context:css/mainLayout.css","context:css/components.css"}) >> >> >> I have been looking for a solution in the mailing list and didn't >> find >> >> >> anything. I read something about contributing in the AppModule, but I >> >> don't know how to use it with my working scheme. >> >> > >> >> > Just @Inject JavaScriptSupport and use its importStylesheet(Asset >> >> stylesheet) method inside afterRender(). AssetSource provides Asset >> >> instances to you. >> >> > >> >> > -- >> >> > 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: users-unsubscr...@tapestry.apache.org >> >> > For additional commands, e-mail: