You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@myfaces.apache.org by Martin Marinschek <ma...@gmail.com> on 2007/12/13 09:16:31 UTC

Re: Getting all currently loaded managed beans in a phase listener

Hi Todd,

yes, but if you are using Spring for your service beans, you can
easily use it also for your JSF managed beans.

The suggestion of Gerald and Simon was - don't use the JSF managed
bean facility at all, use only spring beans (since spring 2.0, you can
scope them with request/session-scope).

regards,

Martin

On Nov 30, 2007 1:55 AM, Todd Nine <to...@gmail.com> wrote:
> Thanks guys.  I'll probably just go with the managed property method and add
> my inits to the last setter.  I wasn't aware that it is part of the spec
> that they're loaded in defined order.  Knowing that makes it much easier to
> fix the issue.  As far as using Spring beans for business objects, I use the
> Spring JSF variable resolver
> http://static.springframework.org/spring/docs/2.0.x/reference/webintegration.html#jsf
> to inject my spring beans into my JSF beans with managed properties.  This
> allows me to wire everything together without the need to add a lot of
> spring context lookups into my code.
>
>
>
> On Nov 29, 2007 3:33 PM, simon <si...@chello.at> wrote:
> > Hi Todd,
> >
> > Yes, I agree with Gerald.
> >
> > Have a look at catagay's more recent post:
> >
> http://cagataycivici.wordpress.com/2007/09/10/using-spring-to-manage-jsf-beans/
> >
> > Since Spring 2.0 it has been possible to declare a scope in spring bean
> > configuration, so there is absolutely no point in using JSF managed
> > beans at all any more. And then with spring you have proper facilities
> > to solve this, including (in order of preference for me):
> >  * injection via constructor params
> >  * an @PostConstruct annotation within the bean (Spring 2.5)
> >  * an init-method attribute in the bean config
> >
> > If you absolutely cannot move to Spring 2.x then Volker's reply is also
> > an option: use the last property in the props list for the managed bean
> > to trigger the init.
> >
> > I'm not sure what you mean by "get currently loaded beans". When beans
> > are created they go into the standard request,session or app scopes like
> > all other variables.
> >
> > You could write a custom VariableResolver that delegates all calls down
> > to the "real" implementation; this will see every request to get a bean.
> > However the problem is that there is no way to know whether the object
> > returned by the underlying variable resolver has just been created or it
> > already existed.
> >
> > You could register a listener on a Session which would get informed of
> > every variable that gets added to the http session. However AFAIK there
> > is no equivalent for request scope. Maybe you could override the
> > HttpRequest object and use a custom map for the properties that
> > supported a "listener" like session does. All rather tricky though.
> >
> > Regards,
> >
> > Simon
> >
> >
> >
> >
> > On Thu, 2007-11-29 at 20:58 +0100, Gerald Müllan wrote:
> > > Hi,
> > >
> > > why do you define the managed-beans via the jsf-managed-bean facility?
> > >
> > > Would be a lot easier if you also define them with the help of spring.
> > >
> > > You can use the init-method property in Spring in order to initialize
> > > your Spring bean.
> > >
> > > cheers,
> > >
> > > Gerald
> > >
> > > On Nov 29, 2007 7:56 PM, Todd Nine <to...@gmail.com> wrote:
> > > > Hi all,
> > > >   I'm using a combination of Spring and MyFaces for my project.  Since
> I use
> > > > the managed bean properties to inject my Spring beans into my managed
> beans,
> > > > I'm unable to do initialization in the constructor, and I really need
> to
> > > > implement a callback in my managed beans to initialize values from the
> > > > Spring business objects.  I have created something similar to the
> example on
> > > > the following site.
> > > >
> > > >
> http://cagataycivici.wordpress.com/2006/06/06/managed_beans_aware_of_the/
> > > >
> > > > However, I'm dealing with a legacy application, and I can't depend on
> a
> > > > standard naming convention as the example does, there is far too much
> code
> > > > to refactor everything.  Is there any way I can get all currently
> loaded
> > > > beans in the current thread instead of using something like the
> following to
> > > > explicitly return it?
> > > >
> > > >
> event.getFacesContext().getApplication().createValueBinding(beanName).getValue(ctx);
> > > >
> > > > Thanks,
> > > > Todd
> > > >
> > >
> > >
> > >
> >
> >
>
>



-- 

http://www.irian.at

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

Professional Support for Apache MyFaces

Re: Getting all currently loaded managed beans in a phase listener

Posted by jimmyau <ji...@privasia.com>.
I dunt think so. spring bean need interface. jsf bean no need interface.

----- Original Message ----- 
From: "Martin Marinschek" <ma...@gmail.com>
To: "MyFaces Discussion" <us...@myfaces.apache.org>
Sent: Thursday, December 13, 2007 4:16 PM
Subject: Re: Getting all currently loaded managed beans in a phase listener


> Hi Todd,
>
> yes, but if you are using Spring for your service beans, you can
> easily use it also for your JSF managed beans.
>
> The suggestion of Gerald and Simon was - don't use the JSF managed
> bean facility at all, use only spring beans (since spring 2.0, you can
> scope them with request/session-scope).
>
> regards,
>
> Martin
>
> On Nov 30, 2007 1:55 AM, Todd Nine <to...@gmail.com> wrote:
>> Thanks guys.  I'll probably just go with the managed property method and 
>> add
>> my inits to the last setter.  I wasn't aware that it is part of the spec
>> that they're loaded in defined order.  Knowing that makes it much easier 
>> to
>> fix the issue.  As far as using Spring beans for business objects, I use 
>> the
>> Spring JSF variable resolver
>> http://static.springframework.org/spring/docs/2.0.x/reference/webintegration.html#jsf
>> to inject my spring beans into my JSF beans with managed properties. 
>> This
>> allows me to wire everything together without the need to add a lot of
>> spring context lookups into my code.
>>
>>
>>
>> On Nov 29, 2007 3:33 PM, simon <si...@chello.at> wrote:
>> > Hi Todd,
>> >
>> > Yes, I agree with Gerald.
>> >
>> > Have a look at catagay's more recent post:
>> >
>> http://cagataycivici.wordpress.com/2007/09/10/using-spring-to-manage-jsf-beans/
>> >
>> > Since Spring 2.0 it has been possible to declare a scope in spring bean
>> > configuration, so there is absolutely no point in using JSF managed
>> > beans at all any more. And then with spring you have proper facilities
>> > to solve this, including (in order of preference for me):
>> >  * injection via constructor params
>> >  * an @PostConstruct annotation within the bean (Spring 2.5)
>> >  * an init-method attribute in the bean config
>> >
>> > If you absolutely cannot move to Spring 2.x then Volker's reply is also
>> > an option: use the last property in the props list for the managed bean
>> > to trigger the init.
>> >
>> > I'm not sure what you mean by "get currently loaded beans". When beans
>> > are created they go into the standard request,session or app scopes 
>> > like
>> > all other variables.
>> >
>> > You could write a custom VariableResolver that delegates all calls down
>> > to the "real" implementation; this will see every request to get a 
>> > bean.
>> > However the problem is that there is no way to know whether the object
>> > returned by the underlying variable resolver has just been created or 
>> > it
>> > already existed.
>> >
>> > You could register a listener on a Session which would get informed of
>> > every variable that gets added to the http session. However AFAIK there
>> > is no equivalent for request scope. Maybe you could override the
>> > HttpRequest object and use a custom map for the properties that
>> > supported a "listener" like session does. All rather tricky though.
>> >
>> > Regards,
>> >
>> > Simon
>> >
>> >
>> >
>> >
>> > On Thu, 2007-11-29 at 20:58 +0100, Gerald Müllan wrote:
>> > > Hi,
>> > >
>> > > why do you define the managed-beans via the jsf-managed-bean 
>> > > facility?
>> > >
>> > > Would be a lot easier if you also define them with the help of 
>> > > spring.
>> > >
>> > > You can use the init-method property in Spring in order to initialize
>> > > your Spring bean.
>> > >
>> > > cheers,
>> > >
>> > > Gerald
>> > >
>> > > On Nov 29, 2007 7:56 PM, Todd Nine <to...@gmail.com> wrote:
>> > > > Hi all,
>> > > >   I'm using a combination of Spring and MyFaces for my project. 
>> > > > Since
>> I use
>> > > > the managed bean properties to inject my Spring beans into my 
>> > > > managed
>> beans,
>> > > > I'm unable to do initialization in the constructor, and I really 
>> > > > need
>> to
>> > > > implement a callback in my managed beans to initialize values from 
>> > > > the
>> > > > Spring business objects.  I have created something similar to the
>> example on
>> > > > the following site.
>> > > >
>> > > >
>> http://cagataycivici.wordpress.com/2006/06/06/managed_beans_aware_of_the/
>> > > >
>> > > > However, I'm dealing with a legacy application, and I can't depend 
>> > > > on
>> a
>> > > > standard naming convention as the example does, there is far too 
>> > > > much
>> code
>> > > > to refactor everything.  Is there any way I can get all currently
>> loaded
>> > > > beans in the current thread instead of using something like the
>> following to
>> > > > explicitly return it?
>> > > >
>> > > >
>> event.getFacesContext().getApplication().createValueBinding(beanName).getValue(ctx);
>> > > >
>> > > > Thanks,
>> > > > Todd
>> > > >
>> > >
>> > >
>> > >
>> >
>> >
>>
>>
>
>
>
> -- 
>
> http://www.irian.at
>
> Your JSF powerhouse -
> JSF Consulting, Development and
> Courses in English and German
>
> Professional Support for Apache MyFaces
>
> -- 
> This message has been scanned for viruses and
> dangerous content by MailScanner, and is
> believed to be clean.
>
>
>
>
>
> -- 
> No virus found in this incoming message.
> Checked by AVG Free Edition.
> Version: 7.5.503 / Virus Database: 269.16.17/1179 - Release Date: 
> 12/9/2007 11:06 AM
>
> 


-- 
This message has been scanned for viruses and
dangerous content by MailScanner, and is
believed to be clean.