>Why is it prohibited to initialize rowsPerPage in the declaration? An int is 
>definitely immutable. It's not even an object... 
True, but then the question arises will it become more confusing and appear 
inconsisant?  Especially for new users still learning Tapestry, they may get 
confused as to why primitives can be initialized but not Objects?


----- Original Message -----
From: "Olle Hallin" <olle.hal...@gmail.com>
To: "Tapestry users" <users@tapestry.apache.org>
Sent: Monday, 15 December, 2008 3:32:00 PM GMT +02:00 Athens, Beirut, 
Bucharest, Istanbul
Subject: Re: T5: How to initialize page members

You're correct about static final. Didn't think of that . 

But still I think there is room for improvement: 

Consider this use case that is quite clumsy to implement as it is today: 

public class APageThatContainsAGrid { 
@Persist private int rowsPerPage = 10; // forbidden! 
void onAction(int rows) { 
this.rowsPerPage = rows; 
} 
} 

and in the template a <t:grid rowsPerPage="rowsPerPage" .../> and a couple of 
action links for modifying rowsPerPage. 

Why is it prohibited to initialize rowsPerPage in the declaration? An int is 
definitely immutable. It's not even an object... 

Olle 


2008/12/15 Thiago H. de Paula Figueiredo < thiag...@gmail.com > 


Em Mon, 15 Dec 2008 06:47:18 -0300, Olle Hallin < olle.hal...@gmail.com > 
escreveu: 



Hi, 


Hi! 



Beginning with 5.0.17 is is forbidden to have initial values on page 
members, in order to prohibit state leakage between sessions. 
This is fine, since it prevents bugs that can be very tricky to isolate. 

You're right. 




This contradicts to the Tapestry principle *the simplest choice should be 
the correct choice.* 

I don't think so. You have to remember that Tapestry polls page instances, so, 
after one request, Tapestry must restart the page fields values. And that the 
value of a non-primitive field is a reference to an object, not an object 
itself. 




IMHO it should be ok to initialize the member in the declaration if it can be 
guaranteed that the value is immutable. 

IMHO, the best way to declare a field that is immutable is to make it final and 
static (i.e. constant) for it, not a private field. ;) 

-- 
Thiago H. de Paula Figueiredo 
Independent Java consultant, developer, and instructor 
http://www.arsmachina.com.br/thiago 

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




-- 
Olle Hallin 
Senior Java Developer and Architect 
olle.hal...@crisp.se 
www.crisp.se 



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

Reply via email to