Inner classes are not component classes and are not transformed (component
class transformation is the hook that allows @Environmental to work).

On Thu, Jun 25, 2009 at 9:48 AM, Sergey Didenko <sergey.dide...@gmail.com>wrote:

> Sure, I talk about component classes. Sorry for the unclear message.
>
> I played with the bug and reproduced it in the simple form.
>
> It happens when I put an inner class of the page into environment and
> use @Environmental.
> It does not happen when I refactor that inner class out of the page.
> It does not happen when I use environment.peek()
>
> --------------------------------------------------------------------
> SimplePage.java
> --------------------------------------------------------------------
>
> package mytapp.pages;
>
> import org.apache.tapestry5.ioc.annotations.Inject;
> import org.apache.tapestry5.services.Environment;
>
> public class SimplePage {
>
>        public class InnerClass {
>                public String toString() {
>                        return "InnerClass";
>                }
>        }
>
>        @Inject
>        private Environment environment;
>
>        void beginRender() {
>                environment.push( InnerClass.class, new InnerClass() );
>        }
>
>        void afterRender() {
>                environment.pop( InnerClass.class );
>        }
> }
>
> --------------------------------------------------------------------
> SimplePage.tml
> --------------------------------------------------------------------
>
> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
> "http://www.w3.org/TR/html4/strict.dtd";>
> <html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_1_0.xsd";>
>  <head>
>    <title>Simple title</title>
>  </head>
>  <body>
>  <p>Simple text</p>
>
>  <p><t:SimpleComponent/></p>
>
>  </body>
> </html>
>
> --------------------------------------------------------------------
> SimpleComponent.java
> --------------------------------------------------------------------
>
> package mytapp.components;
>
> import mytapp.pages.SimplePage.InnerClass;
>
> import org.apache.tapestry5.MarkupWriter;
> import org.apache.tapestry5.annotations.Environmental;
>
> public class SimpleComponent {
>
>        @Environmental
>        private InnerClass innerClass;
>
>        // UNCOMMENT THIS TO WORK
>        // @Inject
>        // private Environment environment;
>
>        void beginRender( MarkupWriter writer ) {
>                // UNCOMMENT THIS TO WORK
>                // InnerClass innerClass = environment.peek(
> InnerClass.class );
>
>                writer.write( "SimpleComponent " + innerClass.toString() );
>         }
> }
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
> For additional commands, e-mail: users-h...@tapestry.apache.org
>
>


-- 
Howard M. Lewis Ship

Creator of Apache Tapestry
Director of Open Source Technology at Formos

Reply via email to