Hi,

you should be able to get the current instance to the facesContext
like the other times.

We retrieve the reference to springs BeanFactory like this:

FacesContextUtils.getWebApplicationContext(FacesContext.getCurrentInstance())

Then you are able to get the bean you want to inject:

Object newValue = beanFactory.getBean(propName);

and can set it into the managed bean "o" with the property "propName":

PropertyUtils.setSimpleProperty(o, propName, newValue);

With the help of commons beanutils` "PropertyUtils" it is much easier.

Hope this helps,

cheers,

Gerald

On 9/25/06, Ingo Düppe <[EMAIL PROTECTED]> wrote:
Hi Gerald,

this sound to be a smart little solution.
But how did you get the spring bean factory. At the point of
deserialization I don't have any FacesContext or ServletContext
reference to initialize the BeanFactory?

Regards
Ingo

Gerald Müllan schrieb:
> Hi,
>
> we have been faced with the same problem in our application.
>
> You have to take care that after deserialization the spring beans are
> injected the "normal" way. We did this by marking spring beans as
> transient, like you did:
>
> private transient ServiceBean _serviceBean;
>
> //Setter
>
> Letting serialize the spring bean only brings back some nonsense and
> no spring object you can deal with.
>
> So we implemented the method readResolve() (called after
> deserialization) in the managed bean:
>
> public Object readResolve() throws ObjectStreamException
> {
>   return TransientFieldsInjector.inject(this);
> }
>
> The injector has to get the bean from the spring BeanFactory and call
> the corresponding setter in the managed bean to inject it "manually".
> You have to do little reflection stuff, but only a few loc.
>
> Maybe there are also other solutions. We did it and it works very fine
> in combination
> with t:saveState.
>
> Hope this helps,
>
> cheers,
>
> Gerald
>
> On 9/25/06, Ingo Düppe <[EMAIL PROTECTED]> wrote:
>> Hi,
>>
>> I have a conceptional question. Within my application I define a
>> managed-bean "registrationController" that gets a reference to a spring
>> bean "registrationService" by the jsf property injection. The spring
>> bean is stateless and is not serializable, so I need to define the field
>> reference in "registrationController" as transient. This prevents me for
>> getting NotSerializableException.
>>
>> But what happens if the session is reloaded, will jsf reinject the
>> properties?
>> Is there any recommended way how to deal with this.
>>
>> The obvious way to make the service bean serializable doesn't seem to
>> work, because a whole data access layer is bound to the service bean.
>>
>> Or do I need to clearly separate. All managed-beans that have a
>> reference to the service layer need to be scoped as application (or
>> maybe as request) and only the value objects or entities are allowed to
>> be stored in the session scope.
>>
>> Regards,
>> Ingo
>>
>> Here is an example of my configuration:
>>     <managed-bean>
>>         <managed-bean-name>registrationController</managed-bean-name>
>>
>> 
<managed-bean-class>org.openuss.security.registration.RegistrationController</managed-bean-class>
>>
>>         <managed-bean-scope>session</managed-bean-scope>
>>         <managed-property>
>>             <property-name>service</property-name>
>>             <value>#{registrationService}</value>
>>         </managed-property>
>>     </managed-bean>
>>
>>
>>
>>
>>
>
>




--
http://www.irian.at

Your JSF powerhouse -
JSF Consulting, Development and
Courses in English and German

Professional Support for Apache MyFaces

Reply via email to