Hi Andy,
I agree with the points:
- get/putTransient should be on UIComponent, or TransientStateHelper
needs to be exposed
- no Serializable keys are necessary
But - I am not sure about removing the TransientStateHelper
contract... It doesn't need to extend from StateHelper, that is true -
but won't the code look funny if state-saved property handling looks
different from transient property handling?
best regards,
Martin
On 10/19/10, Andy Schwartz <andy.schwartz(a)oracle.com> wrote:
Another thought... The TransientStateHelper extends StateHelper. Is
this
necessary? I would prefer to be able to provide an implementation of
TransientStateHelper (eg. in Trinidad's UIXComponentBase) without also
having to implement the very extensive StateHelper contract. Can we
separate these two?
BTW, if we consider adding back the public get/putTransient() methods on
UIComponent as Leonardo proposed originally, I kind of wonder whether we
actually need a public TransientStateHelper contract at all. The details of
transient state storage could be handled internally.
Andy
On 10/19/10 3:19 PM, Andy Schwartz wrote:
>
> Gang -
>
> According to the discussion in this thread, it sounds as if we were
> looking for a way to be able to set arbitrary transient (non-state-saved)
> properties on UIComponent instances. In particular, Leonardo stated that:
>
>> these methods will be used by the vdl or renderers
>
>
> Martin also mentioned:
>
>> adding some methods (getter/setter) on UIComponent, to make possible
>> manipulate them from "outside"the component instance
>
>
> Leonardo's original proposal - adding public get/putTransient() method on
> UIComponent - accomplishes this goal.
>
> However, while reviewing the 20101013 API doc for UIComponent, I see that
> access to these transient properties from "outside" of the component
> instance is no longer possible. There are no public get/putTransient()
> methods on UIComponent. getTransientStateHelper() is protected. This
> means that arbitrary external access to transient properties is not
> supported. Is this by design?
>
> Also, looking at TransientStateHelper, I see that the property keys are
> declared as Serializable. However, isn't the point that these transient
> properties are per-request and will not be state saved? Who is
> serializing this data? Unless I am missing some reason why this transient
> data is being serialized, we should change the type of the property key to
> Object.
>
> Andy
>
> On 9/20/10 9:12 PM, Leonardo Uribe wrote:
>>
>> Hi Martin
>>
>> I have been thinking a lot about it and for this one just add two simple
>> methods on UIComponent could do the job:
>>
>> public Object getTransient(Serializable key)
>> {
>> TransientStateHelper helper = getTransientStateHelper(false);
>> if (helper != null)
>> {
>> return helper.get(key);
>> }
>> return null;
>> }
>>
>> public Object putTransient(Serializable key, Object value)
>> {
>> return getTransientStateHelper().put(key, value);
>> }
>>
>>
>> Just like TransientStateHelper.
>>
>> In theory, these methods will be used by the vdl or renderers, so this
>> two simple methods will handle these cases correctly.
>>
>> >From my point of view, these methods in some way looks similar to the
>> ones used for handle ValueBinding / ValueExpression on UIComponent.
>>
>> best regards,
>>
>> Leonardo Uribe
>>
>> 2010/9/16 Martin Marinschek <mmarinschek(a)apache.org>
>>>
>>> Hi Leo,
>>>
>>> > I was thinking if the interface provided for handle transient
>>> > properties
>>> > should be exposed in some
>>> > way, adding some methods (getter/setter) on UIComponent, to make
>>> > possible
>>> > manipulate them from "outside"
>>> > the component instance. It will be very useful, specially for
>>> > UIViewRoot.
>>>
>>> +1!
>>>
>>> what would be your proposed API?
>>>
>>> best regards,
>>>
>>> Martin
>>>
>>>
>>> --
>>>
>>>
http://www.irian.at
>>>
>>> Your JSF powerhouse -
>>> JSF Consulting, Development and
>>> Courses in English and German
>>>
>>> Professional Support for Apache MyFaces
>>
>>
>
Your JSF powerhouse -
JSF Consulting, Development and
Courses in English and German
Professional Support for Apache MyFaces