Hi Robert,

I understand what it is doing now, but still find it non-intuitive.  I
think part of this goes back to the whole POJO "subclasses-are-evil"
debate.  In my use case, I had an abstract wizard page that had a lot
of concrete subclasses that needed to share data on multiple pages
(@Persist doesn't work in this case, because it persists on the
concrete subclass rather than being shared -- even when defined in the
superclass).  In my view of the world, this should all inherit (I'm
old-school).  However, even if it is a global session-based variable,
I'd expect it to be isolated by a key (defaulting to the variable
name, perhaps) and not a type so that if you wanted to use different
variable names, you'd have:

Page1.java:
  @SessionState(key=Constants.SESSION_OBJECT_CONTEXT)
   private ObjectContext context;

Page2.java
  @SessionState(key=Constants.SESSION_OBJECT_CONTEXT)
   private ObjectContext objectContext;

Leave out the key, and you get two session state variables by
different names.  Just my opinion, of course.  :-)

Thanks,

mrg


On Thu, Jan 6, 2011 at 11:03 AM, Robert Zeigler
<robert.zeig...@roxanemy.com> wrote:
> Hi Mike,
>
> I understand that the behavior seems a bit non-intuitive.  It has to do with 
> the fact that the @SessionState objects are global (ie not per-page) objects.
> The decision was made early on to base these solely on the type of the 
> object, rather than on the name of the object.
> Usually, @SessionState objects are some unique, application-specific object 
> (eg: a "Visit" object for T3/T4 users).  I know you're also a cayenne user, 
> so imagine:
>
> Page1.java:
>   @SessionState
>    private ObjectContext context;
>
> Page2.java
>   @SessionState
>    private ObjectContext objectContext;
>
>
> Assuming you're  using the common paradigm of an ObjectContext-per-session, 
> wouldn't you expect the context, stored in the session, to be the same in 
> these two pages?
>
> @SessionState can be thought of as an easy way to map a page variable to an 
> HttpSession-bound variable, based on teh type of the variable.  It's a little 
> more convoluted than that (or can be), but that sums up the typical use-case.
>
> Robert
>
> On Jan 6, 2011, at 1/69:55 AM , Michael Gentry wrote:
>
>> On Thu, Jan 6, 2011 at 10:14 AM, Thiago H. de Paula Figueiredo
>> <thiag...@gmail.com> wrote:
>>> On Thu, 06 Jan 2011 13:09:43 -0200, Michael Gentry <mgen...@masslight.net>
>>>> Thanks for the explanation, but the types might be a red herring.  I'm
>>>> less concerned about that than the fact that Tapestry seems to be
>>>> assigning one of my variables to a different variable.  It doesn't
>>>> matter if the types are the same or different.  I could've had:
>>>
>>> You're not correct. All @SessionState fields of a given type are mapped to
>>> the same HttpSession attribute, so the behaviour you're experiencing is
>>> exactly the expected, documented one.
>>
>> Hi Thiago,
>>
>> How does this even begin to make sense?  If I have:
>>
>> @Property
>> private List<String> list1;
>> @Property
>> private List<String> list2;
>>
>> Are they going to be the same lists, too?  (They shouldn't -- I know
>> I've had multiple ValueEncoders in the same page class and they
>> persisted separately).  I know I have variables like:
>>
>> private boolean cancelClicked;
>> private boolean saveClicked;
>>
>> Java keeps those two separate.  Why would @SessionState operate in an
>> completely different manner?  (OK, so maybe it is documented somewhere
>> -- I did look, but didn't find it.)
>>
>> What if you have this?
>>
>> public class Page1
>> {
>> �...@sessionstate(create=false)
>>  private List<String> strings;
>> }
>>
>> public class Page2
>> {
>> �...@sessionstate(create=false)
>>  private List<String> strings;
>> }
>>
>> Are those two lists in two different pages going to be the same, too?
>> This seems pretty confusing.  :-)
>>
>> It seems like I just need a global HashMap somewhere and manage things by 
>> key.
>>
>> Thanks again,
>>
>> mrg
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
>> For additional commands, e-mail: users-h...@tapestry.apache.org
>>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
> For additional commands, e-mail: users-h...@tapestry.apache.org
>
>

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

Reply via email to