>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