You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tapestry.apache.org by Chris Mylonas <ch...@opencsta.org> on 2012/04/02 03:41:51 UTC

Custom Component - @BeforeRenderBody not rendering stuff

Hi Tapestry List,

After spending a few hours with render phases and all that comes with it (heartbeat/resources) I'm in a bit of a jam that I don't know where to go next.
I'm setting up a basic component called PhoneView that receives an ArrayList of Phone objects...similar to the Tree example on the wiki [1]

@CleanupRender & @BeforeRenderBody have the same code to make it easy for the beginner (me!) to see his progress...
There are 2 items in the array list I have created using a BeanEditForm, so I presume I should see three lots of the div saying "CHRIS! This is your amazing test div - " with the render phase name.  (2 x BeforeRenderBody) + (1 x CleanupRender).

I'm not :(

Running your eye over this code/template...can you help me?


	/**
	 * Defines the source of the phones
	 */
	@Parameter(required = true)
	private ArrayList<Phone> source ;

	/**
	 * Iterator to go over the source (Phone) elements
	 */
	private Iterator<Phone> iterator;
	
	/**
	 * 
	 */
	@Inject
	private ComponentResources resources ;
	
	/**
	 * 
	 */
	@Parameter
	private Phone currentPhone ;
	
    /**
     * 
     */
    @Parameter(defaultPrefix = BindingConstants.LITERAL)
    private Block empty;

    /**
     * 
     */
    @Environmental
    private Heartbeat heartbeat ;
    
	/**
	 * @return
	 */
	@SetupRender
	boolean SetupRender(){
		 if( source == null ){
			 return false ;
		 }
         this.iterator = source.iterator();
         return (iterator.hasNext());
	}
	
	@BeginRender
	void beginRender(){
		currentPhone = iterator.next();
		heartbeat.begin();		
	}
	
	@BeforeRenderBody
	void beforeRenderBody(MarkupWriter writer){
		
		Element cur = writer.element("div",
				"class","userbackground").addClassName("adifferentbackground");
		cur.text("CHRIS! This is your amazing test div - beforeRenderBody");
		writer.end();

		
		resources.renderInformalParameters(writer);
	}
	/**
	 * @return
	 */
	@AfterRender
	boolean afterRender(){
		heartbeat.end();
		return (!iterator.hasNext());
	}

	/**
	 * @param writer
	 */
	@CleanupRender
	void cleanupRender(MarkupWriter writer){
		Element cur = writer.element("div",
				"class","userbackground").addClassName("adifferentbackground");
		cur.text("CHRIS! This is your amazing test div - cleanupRender");
		writer.end();
	}


And the tml snippet from Index.tml

<t:grid source="phones"/>
<br/>
<t:pagelink page="Phone/Create">Add Phone</t:pagelink>
<br/>
Chris 1
<br/>
<t:PhoneView source="phones"/>
<br/>
Chris 2



Thanks
Chris



[1] = https://wiki.apache.org/tapestry/Tapestry5HowToCreateYourOwnComponents

Re: Custom Component - @BeforeRenderBody not rendering stuff

Posted by Chris Mylonas <ch...@opencsta.org>.
Thanks

My "source" (and whatever the iterator returns) are always null...so I'll have to find out why that happens.

On 02/04/2012, at 10:14 PM, Lance Java wrote:

> Tapestry's own loop component might give you some inspiration too
> http://tapestry.apache.org/5.3/apidocs/src-html/org/apache/tapestry5/corelib/components/Loop.html
> 
> 
> On Monday, 2 April 2012, Lance Java <la...@googlemail.com> wrote:
>> 
>> Perhaps this diagram will help to debug
> http://tapestry.apache.org/component-rendering.html
>> 
>> On Monday, 2 April 2012, Chris Mylonas <ch...@opencsta.org> wrote:
>>> Hi Tapestry List,
>>> 
>>> After spending a few hours with render phases and all that comes with it
> (heartbeat/resources) I'm in a bit of a jam that I don't know where to go
> next.
>>> I'm setting up a basic component called PhoneView that receives an
> ArrayList of Phone objects...similar to the Tree example on the wiki [1]
>>> 
>>> @CleanupRender & @BeforeRenderBody have the same code to make it easy
> for the beginner (me!) to see his progress...
>>> There are 2 items in the array list I have created using a BeanEditForm,
> so I presume I should see three lots of the div saying "CHRIS! This is your
> amazing test div - " with the render phase name.  (2 x BeforeRenderBody) +
> (1 x CleanupRender).
>>> 
>>> I'm not :(
>>> 
>>> Running your eye over this code/template...can you help me?
>>> 
>>> 
>>>       /**
>>>        * Defines the source of the phones
>>>        */
>>>       @Parameter(required = true)
>>>       private ArrayList<Phone> source ;
>>> 
>>>       /**
>>>        * Iterator to go over the source (Phone) elements
>>>        */
>>>       private Iterator<Phone> iterator;
>>> 
>>>       /**
>>>        *
>>>        */
>>>       @Inject
>>>       private ComponentResources resources ;
>>> 
>>>       /**
>>>        *
>>>        */
>>>       @Parameter
>>>       private Phone currentPhone ;
>>> 
>>>   /**
>>>    *
>>>    */
>>>   @Parameter(defaultPrefix = BindingConstants.LITERAL)
>>>   private Block empty;
>>> 
>>>   /**
>>>    *
>>>    */
>>>   @Environmental
>>>   private Heartbeat heartbeat ;
>>> 
>>>       /**
>>>        * @return
>>>        */
>>>       @SetupRender
>>>       boolean SetupRender(){
>>>                if( source == null ){
>>>                        return false ;
>>>                }
>>>        this.iterator = source.iterator();
>>>        return (iterator.hasNext());
>>>       }
>>> 
>>>       @BeginRender
>>>       void beginRender(){
>>>               currentPhone = iterator.next();
>>>               heartbeat.begin();
>>>       }
>>> 
>>>       @BeforeRenderBody
>>>       void beforeRenderBody(MarkupWriter writer){
>>> 
>>>               Element cur = writer.element("div",
>>> 
> "class","userbackground").addClassName("adifferentbackground");
>>>               cur.text("CHRIS! This is your amazing test div -
> beforeRenderBody");
>>>               writer.end();
>>> 
>>> 
>>>               resources.renderInformalParameters(writer);
>>>       }
>>>       /**
>>>        * @return
>>>        */
>>>       @AfterRender
>>>       boolean afterRender(){
>>>               heartbeat.end();
>>>               return (!iterator.hasNext());
>>>       }
>>> 
>>>       /**
>>>        * @param writer
>>>        */
>>>       @CleanupRender
>>>       void cleanupRender(MarkupWriter writer){
>>>               Element cur = writer.element("div",
>>> 
> "class","userbackground").addClassName("adifferentbackground");
>>>               cur.text("CHRIS! This is your amazing test div -
> cleanupRender");
>>>               writer.end();
>>>       }
>>> 
>>> 
>>> And the tml snippet from Index.tml
>>> 
>>> <t:grid source="phones"/>
>>> <br/>
>>> <t:pagelink page="Phone/Create">Add Phone</t:pagelink>
>>> <br/>
>>> Chris 1
>>> <br/>
>>> <t:PhoneView source="phones"/>
>>> <br/>
>>> Chris 2
>>> 
>>> 
>>> 
>>> Thanks
>>> Chris
>>> 
>>> 
>>> 
>>> [1] =
> https://wiki.apache.org/tapestry/Tapestry5HowToCreateYourOwnComponents


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org


Re: Custom Component - @BeforeRenderBody not rendering stuff

Posted by Lance Java <la...@googlemail.com>.
Tapestry's own loop component might give you some inspiration too
http://tapestry.apache.org/5.3/apidocs/src-html/org/apache/tapestry5/corelib/components/Loop.html


On Monday, 2 April 2012, Lance Java <la...@googlemail.com> wrote:
>
> Perhaps this diagram will help to debug
http://tapestry.apache.org/component-rendering.html
>
> On Monday, 2 April 2012, Chris Mylonas <ch...@opencsta.org> wrote:
>> Hi Tapestry List,
>>
>> After spending a few hours with render phases and all that comes with it
(heartbeat/resources) I'm in a bit of a jam that I don't know where to go
next.
>> I'm setting up a basic component called PhoneView that receives an
ArrayList of Phone objects...similar to the Tree example on the wiki [1]
>>
>> @CleanupRender & @BeforeRenderBody have the same code to make it easy
for the beginner (me!) to see his progress...
>> There are 2 items in the array list I have created using a BeanEditForm,
so I presume I should see three lots of the div saying "CHRIS! This is your
amazing test div - " with the render phase name.  (2 x BeforeRenderBody) +
(1 x CleanupRender).
>>
>> I'm not :(
>>
>> Running your eye over this code/template...can you help me?
>>
>>
>>        /**
>>         * Defines the source of the phones
>>         */
>>        @Parameter(required = true)
>>        private ArrayList<Phone> source ;
>>
>>        /**
>>         * Iterator to go over the source (Phone) elements
>>         */
>>        private Iterator<Phone> iterator;
>>
>>        /**
>>         *
>>         */
>>        @Inject
>>        private ComponentResources resources ;
>>
>>        /**
>>         *
>>         */
>>        @Parameter
>>        private Phone currentPhone ;
>>
>>    /**
>>     *
>>     */
>>    @Parameter(defaultPrefix = BindingConstants.LITERAL)
>>    private Block empty;
>>
>>    /**
>>     *
>>     */
>>    @Environmental
>>    private Heartbeat heartbeat ;
>>
>>        /**
>>         * @return
>>         */
>>        @SetupRender
>>        boolean SetupRender(){
>>                 if( source == null ){
>>                         return false ;
>>                 }
>>         this.iterator = source.iterator();
>>         return (iterator.hasNext());
>>        }
>>
>>        @BeginRender
>>        void beginRender(){
>>                currentPhone = iterator.next();
>>                heartbeat.begin();
>>        }
>>
>>        @BeforeRenderBody
>>        void beforeRenderBody(MarkupWriter writer){
>>
>>                Element cur = writer.element("div",
>>
 "class","userbackground").addClassName("adifferentbackground");
>>                cur.text("CHRIS! This is your amazing test div -
beforeRenderBody");
>>                writer.end();
>>
>>
>>                resources.renderInformalParameters(writer);
>>        }
>>        /**
>>         * @return
>>         */
>>        @AfterRender
>>        boolean afterRender(){
>>                heartbeat.end();
>>                return (!iterator.hasNext());
>>        }
>>
>>        /**
>>         * @param writer
>>         */
>>        @CleanupRender
>>        void cleanupRender(MarkupWriter writer){
>>                Element cur = writer.element("div",
>>
 "class","userbackground").addClassName("adifferentbackground");
>>                cur.text("CHRIS! This is your amazing test div -
cleanupRender");
>>                writer.end();
>>        }
>>
>>
>> And the tml snippet from Index.tml
>>
>> <t:grid source="phones"/>
>> <br/>
>> <t:pagelink page="Phone/Create">Add Phone</t:pagelink>
>> <br/>
>> Chris 1
>> <br/>
>> <t:PhoneView source="phones"/>
>> <br/>
>> Chris 2
>>
>>
>>
>> Thanks
>> Chris
>>
>>
>>
>> [1] =
https://wiki.apache.org/tapestry/Tapestry5HowToCreateYourOwnComponents

Re: Custom Component - @BeforeRenderBody not rendering stuff

Posted by Lance Java <la...@googlemail.com>.
Perhaps this diagram will help to debug
http://tapestry.apache.org/component-rendering.html

On Monday, 2 April 2012, Chris Mylonas <ch...@opencsta.org> wrote:
> Hi Tapestry List,
>
> After spending a few hours with render phases and all that comes with it
(heartbeat/resources) I'm in a bit of a jam that I don't know where to go
next.
> I'm setting up a basic component called PhoneView that receives an
ArrayList of Phone objects...similar to the Tree example on the wiki [1]
>
> @CleanupRender & @BeforeRenderBody have the same code to make it easy for
the beginner (me!) to see his progress...
> There are 2 items in the array list I have created using a BeanEditForm,
so I presume I should see three lots of the div saying "CHRIS! This is your
amazing test div - " with the render phase name.  (2 x BeforeRenderBody) +
(1 x CleanupRender).
>
> I'm not :(
>
> Running your eye over this code/template...can you help me?
>
>
>        /**
>         * Defines the source of the phones
>         */
>        @Parameter(required = true)
>        private ArrayList<Phone> source ;
>
>        /**
>         * Iterator to go over the source (Phone) elements
>         */
>        private Iterator<Phone> iterator;
>
>        /**
>         *
>         */
>        @Inject
>        private ComponentResources resources ;
>
>        /**
>         *
>         */
>        @Parameter
>        private Phone currentPhone ;
>
>    /**
>     *
>     */
>    @Parameter(defaultPrefix = BindingConstants.LITERAL)
>    private Block empty;
>
>    /**
>     *
>     */
>    @Environmental
>    private Heartbeat heartbeat ;
>
>        /**
>         * @return
>         */
>        @SetupRender
>        boolean SetupRender(){
>                 if( source == null ){
>                         return false ;
>                 }
>         this.iterator = source.iterator();
>         return (iterator.hasNext());
>        }
>
>        @BeginRender
>        void beginRender(){
>                currentPhone = iterator.next();
>                heartbeat.begin();
>        }
>
>        @BeforeRenderBody
>        void beforeRenderBody(MarkupWriter writer){
>
>                Element cur = writer.element("div",
>
 "class","userbackground").addClassName("adifferentbackground");
>                cur.text("CHRIS! This is your amazing test div -
beforeRenderBody");
>                writer.end();
>
>
>                resources.renderInformalParameters(writer);
>        }
>        /**
>         * @return
>         */
>        @AfterRender
>        boolean afterRender(){
>                heartbeat.end();
>                return (!iterator.hasNext());
>        }
>
>        /**
>         * @param writer
>         */
>        @CleanupRender
>        void cleanupRender(MarkupWriter writer){
>                Element cur = writer.element("div",
>
 "class","userbackground").addClassName("adifferentbackground");
>                cur.text("CHRIS! This is your amazing test div -
cleanupRender");
>                writer.end();
>        }
>
>
> And the tml snippet from Index.tml
>
> <t:grid source="phones"/>
> <br/>
> <t:pagelink page="Phone/Create">Add Phone</t:pagelink>
> <br/>
> Chris 1
> <br/>
> <t:PhoneView source="phones"/>
> <br/>
> Chris 2
>
>
>
> Thanks
> Chris
>
>
>
> [1] =
https://wiki.apache.org/tapestry/Tapestry5HowToCreateYourOwnComponents