You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@myfaces.apache.org by Tobias Eisentrager <te...@googlemail.com> on 2011/08/19 12:49:59 UTC

Re: Access another managed Bean in JSF2.1 with Servlet 2.4

I tried Jakob's suggestion but it did not work - it returns null.

Are there any other ways to access the current SessionBeans?

Or, maybe the design of the App is not good - maybe i'm doing something
wrong.

Here is what i want to do:

I have a Class which I use for all Server communication called
DataConnector. It is a private member of my main Session Bean, called
SessionBean. So, when I need Data i want to fire a command like this:

Code in some ManagedBean:

List<Item> items = null;

public List<Item> getItems() {
    if(items==null) {
        SessionBean sessionB = (SessionBean)
JSF2Util.findBean("SessionBean");
        List<Item> items = sessionB.getDataConnector().cmdGetItems();
    }
    return items;
}

JSF2Util:

@SuppressWarnings("unchecked")
public static <T> T findBean(String beanName) {
FacesContext context = FacesContext.getCurrentInstance();
return (T) context.getApplication().evaluateExpressionGet(context, "#{" +
beanName + "}", Object.class);
}

Since the findBean does not work for some reason, should I do this scenario
different?

Oh, all this used to work in JSF 1.2 in another similar app of mine.

Thanks

Toby



On Mon, Jun 27, 2011 at 4:41 AM, Leonardo Uribe <lu...@gmail.com> wrote:

> Hi
>
> I have been thinking about this one, and maybe there is a
> misunderstanding with @ManagedProperty annotation. That annotation is
> not servlet api, is in JSF or in java EE (i don't know which subset
> are you using). If is the JSF variant, note that annotation only works
> for managed beans, so you can't use it on other objects that are not
> instantiated by JSF.
>
> The suggestion of Jakob should work.
>
> regards,
>
> Leonardo Uribe
>
> 2011/6/26 Jakob Korherr <ja...@gmail.com>:
> > Hi,
> >
> > Try using this:
> >
> > FacesContext facesContext = FacesContext.getCurrentInstance();
> > YourBean yourBean =
> > facesContext.getApplication().evaluateExpressionGet(facesContext,
> > "#{yourBean}", YourBean.class);
> >
> > Regards,
> > Jakob
> >
> > 2011/6/26 Tobias Eisentrager <te...@googlemail.com>:
> >> Hello Group - this is my private email address.
> >>
> >> I have already asked this on
> >>
> http://stackoverflow.com/questions/6466783/access-another-managed-bean-in-jsf2-1-with-servlet-2-4
> >> and have not gotten a sufficient answer yet.
> >>
> >> We have recently upgraded from JSF 1.2 to 2.1. We are running on
> >> WebSphere 6.1 which has Servlet 2.4
> >>
> >> We are using the following libraries: myfaces 2.1.1 el-api-2.2
> >>
> >> Now the only problem we have is that we cannot access the other
> >> Backing Beans like we did before with:
> >>
> >> public static Object getBackingBean( String pName ) {
> >>   ELContext elContext =
> FacesContext.getCurrentInstance().getELContext();
> >>   Object ret = elContext.getELResolver().getValue(elContext, null,
> pName);
> >>   return ret;
> >> }
> >>
> >> This will always return null. We have also tried:
> >>
> >> Beanclass bean = (Beanclass)
> FacesContext.getCurrentInstance().getApplication()
> >> .getELResolver().getValue(elContext, null, "beanclass");
> >>
> >> which return null as well.
> >>
> >> We have tried the @ManagedProperty annotation but this is apparently a
> >> Servlet 2.5 feature. Is it possible that the ELContext uses DI now by
> >> default? Is there a way to get an Instance of another backing Bean in
> >> JSF2.1 and Servlet 2.4?
> >>
> >> Thanks!
> >>
> >> Toby
> >>
> >
> >
> >
> > --
> > Jakob Korherr
> >
> > blog: http://www.jakobk.com
> > twitter: http://twitter.com/jakobkorherr
> > work: http://www.irian.at
> >
>

Re: Access another managed Bean in JSF2.1 with Servlet 2.4

Posted by Tobias Eisentrager <te...@googlemail.com>.
Your method works and creates a bean instance - i wonder why the other
method didn't.

Thank you very much - i'm relieved that this works now.

On Fri, Aug 19, 2011 at 3:07 PM, Rudy De Busscher <rd...@gmail.com>wrote:

> Hi Toby,
>
> I thought they were created when requested through EL.  So it should work.
>
> I see that you are using something different to execute an EL expression.
> This is what I use.
>
> *        FacesContext facesContext = getFacesContext();
>        Application app = facesContext.getApplication();
>        ExpressionFactory elFactory = app.getExpressionFactory();
>        ELContext elContext = facesContext.getELContext();
>        ValueExpression valueExp =
>            elFactory.createValueExpression(elContext, expression,
> Object.class);
>        return valueExp.getValue(elContext);
> *
> where expression is something like #{sessionBean}. Can you try the above
> statements
>
> regards
> Rudy
> On 19 August 2011 14:52, Tobias Eisentrager <teisentraeger@googlemail.com
> >wrote:
>
> > Thank you for the tip - it helped me. The problem was that the Bean did
> not
> > exist yet. And yes - it also did not need to have the capital S.
> > If i now go to a page which uses the sessionBean it will get created and
> > then I can use the findBean Method inside another Bean.
> > Is there a way to create a Bean Instance programmatically?
> > In JSF 1.2 we used this Method:
> >
> > /**
> >  * Gibt die BackingBean mit dem Namen pName zurück.
> >  * Ist die BackingBean noch nicht vorhanden, wird die Bean erzeugt.
> >  *
> >  * @param pString
> >  * @return Object
> >  */
> > public static Object getBackingBean( String pName ) {
> >  ELContext elContext = FacesContext.getCurrentInstance().getELContext();
> >  Object ret = elContext.getELResolver().getValue(elContext, null, pName);
> >  return ret;
> > }
> >
> > It would create an instance if it wasn't there before. Is there something
> > similar in JSF2 I can add to the findBean method so that it creates an
> > instance instead of returning null?
> >
> > Toby
> >
> > On Fri, Aug 19, 2011 at 2:08 PM, Rudy De Busscher <rdebusscher@gmail.com
> > >wrote:
> >
> > > Maybe stupid thing, but have you checked the case of your bean name (is
> > it
> > > "sessionBean" or "SessionBean" or ...)
> > >
> > > If the bean is supposed to be on the session, you can have access (to
> > > verify
> > > if the bean exists) to it with the command
> > >
> > > FacesContext.getCurrentInstance().getExternalContext().getSessionMap();
> > >
> > > regards
> > > Rudy
> > >
> > > On 19 August 2011 12:49, Tobias Eisentrager <
> > teisentraeger@googlemail.com
> > > >wrote:
> > >
> > > > I tried Jakob's suggestion but it did not work - it returns null.
> > > >
> > > > Are there any other ways to access the current SessionBeans?
> > > >
> > > > Or, maybe the design of the App is not good - maybe i'm doing
> something
> > > > wrong.
> > > >
> > > > Here is what i want to do:
> > > >
> > > > I have a Class which I use for all Server communication called
> > > > DataConnector. It is a private member of my main Session Bean, called
> > > > SessionBean. So, when I need Data i want to fire a command like this:
> > > >
> > > > Code in some ManagedBean:
> > > >
> > > > List<Item> items = null;
> > > >
> > > > public List<Item> getItems() {
> > > >    if(items==null) {
> > > >        SessionBean sessionB = (SessionBean)
> > > > JSF2Util.findBean("SessionBean");
> > > >        List<Item> items = sessionB.getDataConnector().cmdGetItems();
> > > >    }
> > > >    return items;
> > > > }
> > > >
> > > > JSF2Util:
> > > >
> > > > @SuppressWarnings("unchecked")
> > > > public static <T> T findBean(String beanName) {
> > > > FacesContext context = FacesContext.getCurrentInstance();
> > > > return (T) context.getApplication().evaluateExpressionGet(context,
> "#{"
> > +
> > > > beanName + "}", Object.class);
> > > > }
> > > >
> > > > Since the findBean does not work for some reason, should I do this
> > > scenario
> > > > different?
> > > >
> > > > Oh, all this used to work in JSF 1.2 in another similar app of mine.
> > > >
> > > > Thanks
> > > >
> > > > Toby
> > > >
> > > >
> > > >
> > > > On Mon, Jun 27, 2011 at 4:41 AM, Leonardo Uribe <lu...@gmail.com>
> > > wrote:
> > > >
> > > > > Hi
> > > > >
> > > > > I have been thinking about this one, and maybe there is a
> > > > > misunderstanding with @ManagedProperty annotation. That annotation
> is
> > > > > not servlet api, is in JSF or in java EE (i don't know which subset
> > > > > are you using). If is the JSF variant, note that annotation only
> > works
> > > > > for managed beans, so you can't use it on other objects that are
> not
> > > > > instantiated by JSF.
> > > > >
> > > > > The suggestion of Jakob should work.
> > > > >
> > > > > regards,
> > > > >
> > > > > Leonardo Uribe
> > > > >
> > > > > 2011/6/26 Jakob Korherr <ja...@gmail.com>:
> > > > > > Hi,
> > > > > >
> > > > > > Try using this:
> > > > > >
> > > > > > FacesContext facesContext = FacesContext.getCurrentInstance();
> > > > > > YourBean yourBean =
> > > > > > facesContext.getApplication().evaluateExpressionGet(facesContext,
> > > > > > "#{yourBean}", YourBean.class);
> > > > > >
> > > > > > Regards,
> > > > > > Jakob
> > > > > >
> > > > > > 2011/6/26 Tobias Eisentrager <te...@googlemail.com>:
> > > > > >> Hello Group - this is my private email address.
> > > > > >>
> > > > > >> I have already asked this on
> > > > > >>
> > > > >
> > > >
> > >
> >
> http://stackoverflow.com/questions/6466783/access-another-managed-bean-in-jsf2-1-with-servlet-2-4
> > > > > >> and have not gotten a sufficient answer yet.
> > > > > >>
> > > > > >> We have recently upgraded from JSF 1.2 to 2.1. We are running on
> > > > > >> WebSphere 6.1 which has Servlet 2.4
> > > > > >>
> > > > > >> We are using the following libraries: myfaces 2.1.1 el-api-2.2
> > > > > >>
> > > > > >> Now the only problem we have is that we cannot access the other
> > > > > >> Backing Beans like we did before with:
> > > > > >>
> > > > > >> public static Object getBackingBean( String pName ) {
> > > > > >>   ELContext elContext =
> > > > > FacesContext.getCurrentInstance().getELContext();
> > > > > >>   Object ret = elContext.getELResolver().getValue(elContext,
> null,
> > > > > pName);
> > > > > >>   return ret;
> > > > > >> }
> > > > > >>
> > > > > >> This will always return null. We have also tried:
> > > > > >>
> > > > > >> Beanclass bean = (Beanclass)
> > > > > FacesContext.getCurrentInstance().getApplication()
> > > > > >> .getELResolver().getValue(elContext, null, "beanclass");
> > > > > >>
> > > > > >> which return null as well.
> > > > > >>
> > > > > >> We have tried the @ManagedProperty annotation but this is
> > apparently
> > > a
> > > > > >> Servlet 2.5 feature. Is it possible that the ELContext uses DI
> now
> > > by
> > > > > >> default? Is there a way to get an Instance of another backing
> Bean
> > > in
> > > > > >> JSF2.1 and Servlet 2.4?
> > > > > >>
> > > > > >> Thanks!
> > > > > >>
> > > > > >> Toby
> > > > > >>
> > > > > >
> > > > > >
> > > > > >
> > > > > > --
> > > > > > Jakob Korherr
> > > > > >
> > > > > > blog: http://www.jakobk.com
> > > > > > twitter: http://twitter.com/jakobkorherr
> > > > > > work: http://www.irian.at
> > > > > >
> > > > >
> > > >
> > >
> > >
> > >
> > > --
> > > Rudy De Busscher
> > > http://www.c4j.be
> > >
> >
>
>
>
> --
> Rudy De Busscher
> http://www.c4j.be
>

Re: Access another managed Bean in JSF2.1 with Servlet 2.4

Posted by Rudy De Busscher <rd...@gmail.com>.
Hi Toby,

I thought they were created when requested through EL.  So it should work.

I see that you are using something different to execute an EL expression.
This is what I use.

*        FacesContext facesContext = getFacesContext();
        Application app = facesContext.getApplication();
        ExpressionFactory elFactory = app.getExpressionFactory();
        ELContext elContext = facesContext.getELContext();
        ValueExpression valueExp =
            elFactory.createValueExpression(elContext, expression,
Object.class);
        return valueExp.getValue(elContext);
*
where expression is something like #{sessionBean}. Can you try the above
statements

regards
Rudy
On 19 August 2011 14:52, Tobias Eisentrager <te...@googlemail.com>wrote:

> Thank you for the tip - it helped me. The problem was that the Bean did not
> exist yet. And yes - it also did not need to have the capital S.
> If i now go to a page which uses the sessionBean it will get created and
> then I can use the findBean Method inside another Bean.
> Is there a way to create a Bean Instance programmatically?
> In JSF 1.2 we used this Method:
>
> /**
>  * Gibt die BackingBean mit dem Namen pName zurück.
>  * Ist die BackingBean noch nicht vorhanden, wird die Bean erzeugt.
>  *
>  * @param pString
>  * @return Object
>  */
> public static Object getBackingBean( String pName ) {
>  ELContext elContext = FacesContext.getCurrentInstance().getELContext();
>  Object ret = elContext.getELResolver().getValue(elContext, null, pName);
>  return ret;
> }
>
> It would create an instance if it wasn't there before. Is there something
> similar in JSF2 I can add to the findBean method so that it creates an
> instance instead of returning null?
>
> Toby
>
> On Fri, Aug 19, 2011 at 2:08 PM, Rudy De Busscher <rdebusscher@gmail.com
> >wrote:
>
> > Maybe stupid thing, but have you checked the case of your bean name (is
> it
> > "sessionBean" or "SessionBean" or ...)
> >
> > If the bean is supposed to be on the session, you can have access (to
> > verify
> > if the bean exists) to it with the command
> >
> > FacesContext.getCurrentInstance().getExternalContext().getSessionMap();
> >
> > regards
> > Rudy
> >
> > On 19 August 2011 12:49, Tobias Eisentrager <
> teisentraeger@googlemail.com
> > >wrote:
> >
> > > I tried Jakob's suggestion but it did not work - it returns null.
> > >
> > > Are there any other ways to access the current SessionBeans?
> > >
> > > Or, maybe the design of the App is not good - maybe i'm doing something
> > > wrong.
> > >
> > > Here is what i want to do:
> > >
> > > I have a Class which I use for all Server communication called
> > > DataConnector. It is a private member of my main Session Bean, called
> > > SessionBean. So, when I need Data i want to fire a command like this:
> > >
> > > Code in some ManagedBean:
> > >
> > > List<Item> items = null;
> > >
> > > public List<Item> getItems() {
> > >    if(items==null) {
> > >        SessionBean sessionB = (SessionBean)
> > > JSF2Util.findBean("SessionBean");
> > >        List<Item> items = sessionB.getDataConnector().cmdGetItems();
> > >    }
> > >    return items;
> > > }
> > >
> > > JSF2Util:
> > >
> > > @SuppressWarnings("unchecked")
> > > public static <T> T findBean(String beanName) {
> > > FacesContext context = FacesContext.getCurrentInstance();
> > > return (T) context.getApplication().evaluateExpressionGet(context, "#{"
> +
> > > beanName + "}", Object.class);
> > > }
> > >
> > > Since the findBean does not work for some reason, should I do this
> > scenario
> > > different?
> > >
> > > Oh, all this used to work in JSF 1.2 in another similar app of mine.
> > >
> > > Thanks
> > >
> > > Toby
> > >
> > >
> > >
> > > On Mon, Jun 27, 2011 at 4:41 AM, Leonardo Uribe <lu...@gmail.com>
> > wrote:
> > >
> > > > Hi
> > > >
> > > > I have been thinking about this one, and maybe there is a
> > > > misunderstanding with @ManagedProperty annotation. That annotation is
> > > > not servlet api, is in JSF or in java EE (i don't know which subset
> > > > are you using). If is the JSF variant, note that annotation only
> works
> > > > for managed beans, so you can't use it on other objects that are not
> > > > instantiated by JSF.
> > > >
> > > > The suggestion of Jakob should work.
> > > >
> > > > regards,
> > > >
> > > > Leonardo Uribe
> > > >
> > > > 2011/6/26 Jakob Korherr <ja...@gmail.com>:
> > > > > Hi,
> > > > >
> > > > > Try using this:
> > > > >
> > > > > FacesContext facesContext = FacesContext.getCurrentInstance();
> > > > > YourBean yourBean =
> > > > > facesContext.getApplication().evaluateExpressionGet(facesContext,
> > > > > "#{yourBean}", YourBean.class);
> > > > >
> > > > > Regards,
> > > > > Jakob
> > > > >
> > > > > 2011/6/26 Tobias Eisentrager <te...@googlemail.com>:
> > > > >> Hello Group - this is my private email address.
> > > > >>
> > > > >> I have already asked this on
> > > > >>
> > > >
> > >
> >
> http://stackoverflow.com/questions/6466783/access-another-managed-bean-in-jsf2-1-with-servlet-2-4
> > > > >> and have not gotten a sufficient answer yet.
> > > > >>
> > > > >> We have recently upgraded from JSF 1.2 to 2.1. We are running on
> > > > >> WebSphere 6.1 which has Servlet 2.4
> > > > >>
> > > > >> We are using the following libraries: myfaces 2.1.1 el-api-2.2
> > > > >>
> > > > >> Now the only problem we have is that we cannot access the other
> > > > >> Backing Beans like we did before with:
> > > > >>
> > > > >> public static Object getBackingBean( String pName ) {
> > > > >>   ELContext elContext =
> > > > FacesContext.getCurrentInstance().getELContext();
> > > > >>   Object ret = elContext.getELResolver().getValue(elContext, null,
> > > > pName);
> > > > >>   return ret;
> > > > >> }
> > > > >>
> > > > >> This will always return null. We have also tried:
> > > > >>
> > > > >> Beanclass bean = (Beanclass)
> > > > FacesContext.getCurrentInstance().getApplication()
> > > > >> .getELResolver().getValue(elContext, null, "beanclass");
> > > > >>
> > > > >> which return null as well.
> > > > >>
> > > > >> We have tried the @ManagedProperty annotation but this is
> apparently
> > a
> > > > >> Servlet 2.5 feature. Is it possible that the ELContext uses DI now
> > by
> > > > >> default? Is there a way to get an Instance of another backing Bean
> > in
> > > > >> JSF2.1 and Servlet 2.4?
> > > > >>
> > > > >> Thanks!
> > > > >>
> > > > >> Toby
> > > > >>
> > > > >
> > > > >
> > > > >
> > > > > --
> > > > > Jakob Korherr
> > > > >
> > > > > blog: http://www.jakobk.com
> > > > > twitter: http://twitter.com/jakobkorherr
> > > > > work: http://www.irian.at
> > > > >
> > > >
> > >
> >
> >
> >
> > --
> > Rudy De Busscher
> > http://www.c4j.be
> >
>



-- 
Rudy De Busscher
http://www.c4j.be

Re: Access another managed Bean in JSF2.1 with Servlet 2.4

Posted by Tobias Eisentrager <te...@googlemail.com>.
Thank you for the tip - it helped me. The problem was that the Bean did not
exist yet. And yes - it also did not need to have the capital S.
If i now go to a page which uses the sessionBean it will get created and
then I can use the findBean Method inside another Bean.
Is there a way to create a Bean Instance programmatically?
In JSF 1.2 we used this Method:

/**
  * Gibt die BackingBean mit dem Namen pName zurück.
  * Ist die BackingBean noch nicht vorhanden, wird die Bean erzeugt.
  *
  * @param pString
  * @return Object
  */
public static Object getBackingBean( String pName ) {
  ELContext elContext = FacesContext.getCurrentInstance().getELContext();
  Object ret = elContext.getELResolver().getValue(elContext, null, pName);
  return ret;
}

It would create an instance if it wasn't there before. Is there something
similar in JSF2 I can add to the findBean method so that it creates an
instance instead of returning null?

Toby

On Fri, Aug 19, 2011 at 2:08 PM, Rudy De Busscher <rd...@gmail.com>wrote:

> Maybe stupid thing, but have you checked the case of your bean name (is it
> "sessionBean" or "SessionBean" or ...)
>
> If the bean is supposed to be on the session, you can have access (to
> verify
> if the bean exists) to it with the command
>
> FacesContext.getCurrentInstance().getExternalContext().getSessionMap();
>
> regards
> Rudy
>
> On 19 August 2011 12:49, Tobias Eisentrager <teisentraeger@googlemail.com
> >wrote:
>
> > I tried Jakob's suggestion but it did not work - it returns null.
> >
> > Are there any other ways to access the current SessionBeans?
> >
> > Or, maybe the design of the App is not good - maybe i'm doing something
> > wrong.
> >
> > Here is what i want to do:
> >
> > I have a Class which I use for all Server communication called
> > DataConnector. It is a private member of my main Session Bean, called
> > SessionBean. So, when I need Data i want to fire a command like this:
> >
> > Code in some ManagedBean:
> >
> > List<Item> items = null;
> >
> > public List<Item> getItems() {
> >    if(items==null) {
> >        SessionBean sessionB = (SessionBean)
> > JSF2Util.findBean("SessionBean");
> >        List<Item> items = sessionB.getDataConnector().cmdGetItems();
> >    }
> >    return items;
> > }
> >
> > JSF2Util:
> >
> > @SuppressWarnings("unchecked")
> > public static <T> T findBean(String beanName) {
> > FacesContext context = FacesContext.getCurrentInstance();
> > return (T) context.getApplication().evaluateExpressionGet(context, "#{" +
> > beanName + "}", Object.class);
> > }
> >
> > Since the findBean does not work for some reason, should I do this
> scenario
> > different?
> >
> > Oh, all this used to work in JSF 1.2 in another similar app of mine.
> >
> > Thanks
> >
> > Toby
> >
> >
> >
> > On Mon, Jun 27, 2011 at 4:41 AM, Leonardo Uribe <lu...@gmail.com>
> wrote:
> >
> > > Hi
> > >
> > > I have been thinking about this one, and maybe there is a
> > > misunderstanding with @ManagedProperty annotation. That annotation is
> > > not servlet api, is in JSF or in java EE (i don't know which subset
> > > are you using). If is the JSF variant, note that annotation only works
> > > for managed beans, so you can't use it on other objects that are not
> > > instantiated by JSF.
> > >
> > > The suggestion of Jakob should work.
> > >
> > > regards,
> > >
> > > Leonardo Uribe
> > >
> > > 2011/6/26 Jakob Korherr <ja...@gmail.com>:
> > > > Hi,
> > > >
> > > > Try using this:
> > > >
> > > > FacesContext facesContext = FacesContext.getCurrentInstance();
> > > > YourBean yourBean =
> > > > facesContext.getApplication().evaluateExpressionGet(facesContext,
> > > > "#{yourBean}", YourBean.class);
> > > >
> > > > Regards,
> > > > Jakob
> > > >
> > > > 2011/6/26 Tobias Eisentrager <te...@googlemail.com>:
> > > >> Hello Group - this is my private email address.
> > > >>
> > > >> I have already asked this on
> > > >>
> > >
> >
> http://stackoverflow.com/questions/6466783/access-another-managed-bean-in-jsf2-1-with-servlet-2-4
> > > >> and have not gotten a sufficient answer yet.
> > > >>
> > > >> We have recently upgraded from JSF 1.2 to 2.1. We are running on
> > > >> WebSphere 6.1 which has Servlet 2.4
> > > >>
> > > >> We are using the following libraries: myfaces 2.1.1 el-api-2.2
> > > >>
> > > >> Now the only problem we have is that we cannot access the other
> > > >> Backing Beans like we did before with:
> > > >>
> > > >> public static Object getBackingBean( String pName ) {
> > > >>   ELContext elContext =
> > > FacesContext.getCurrentInstance().getELContext();
> > > >>   Object ret = elContext.getELResolver().getValue(elContext, null,
> > > pName);
> > > >>   return ret;
> > > >> }
> > > >>
> > > >> This will always return null. We have also tried:
> > > >>
> > > >> Beanclass bean = (Beanclass)
> > > FacesContext.getCurrentInstance().getApplication()
> > > >> .getELResolver().getValue(elContext, null, "beanclass");
> > > >>
> > > >> which return null as well.
> > > >>
> > > >> We have tried the @ManagedProperty annotation but this is apparently
> a
> > > >> Servlet 2.5 feature. Is it possible that the ELContext uses DI now
> by
> > > >> default? Is there a way to get an Instance of another backing Bean
> in
> > > >> JSF2.1 and Servlet 2.4?
> > > >>
> > > >> Thanks!
> > > >>
> > > >> Toby
> > > >>
> > > >
> > > >
> > > >
> > > > --
> > > > Jakob Korherr
> > > >
> > > > blog: http://www.jakobk.com
> > > > twitter: http://twitter.com/jakobkorherr
> > > > work: http://www.irian.at
> > > >
> > >
> >
>
>
>
> --
> Rudy De Busscher
> http://www.c4j.be
>

Re: Access another managed Bean in JSF2.1 with Servlet 2.4

Posted by Rudy De Busscher <rd...@gmail.com>.
Maybe stupid thing, but have you checked the case of your bean name (is it
"sessionBean" or "SessionBean" or ...)

If the bean is supposed to be on the session, you can have access (to verify
if the bean exists) to it with the command

FacesContext.getCurrentInstance().getExternalContext().getSessionMap();

regards
Rudy

On 19 August 2011 12:49, Tobias Eisentrager <te...@googlemail.com>wrote:

> I tried Jakob's suggestion but it did not work - it returns null.
>
> Are there any other ways to access the current SessionBeans?
>
> Or, maybe the design of the App is not good - maybe i'm doing something
> wrong.
>
> Here is what i want to do:
>
> I have a Class which I use for all Server communication called
> DataConnector. It is a private member of my main Session Bean, called
> SessionBean. So, when I need Data i want to fire a command like this:
>
> Code in some ManagedBean:
>
> List<Item> items = null;
>
> public List<Item> getItems() {
>    if(items==null) {
>        SessionBean sessionB = (SessionBean)
> JSF2Util.findBean("SessionBean");
>        List<Item> items = sessionB.getDataConnector().cmdGetItems();
>    }
>    return items;
> }
>
> JSF2Util:
>
> @SuppressWarnings("unchecked")
> public static <T> T findBean(String beanName) {
> FacesContext context = FacesContext.getCurrentInstance();
> return (T) context.getApplication().evaluateExpressionGet(context, "#{" +
> beanName + "}", Object.class);
> }
>
> Since the findBean does not work for some reason, should I do this scenario
> different?
>
> Oh, all this used to work in JSF 1.2 in another similar app of mine.
>
> Thanks
>
> Toby
>
>
>
> On Mon, Jun 27, 2011 at 4:41 AM, Leonardo Uribe <lu...@gmail.com> wrote:
>
> > Hi
> >
> > I have been thinking about this one, and maybe there is a
> > misunderstanding with @ManagedProperty annotation. That annotation is
> > not servlet api, is in JSF or in java EE (i don't know which subset
> > are you using). If is the JSF variant, note that annotation only works
> > for managed beans, so you can't use it on other objects that are not
> > instantiated by JSF.
> >
> > The suggestion of Jakob should work.
> >
> > regards,
> >
> > Leonardo Uribe
> >
> > 2011/6/26 Jakob Korherr <ja...@gmail.com>:
> > > Hi,
> > >
> > > Try using this:
> > >
> > > FacesContext facesContext = FacesContext.getCurrentInstance();
> > > YourBean yourBean =
> > > facesContext.getApplication().evaluateExpressionGet(facesContext,
> > > "#{yourBean}", YourBean.class);
> > >
> > > Regards,
> > > Jakob
> > >
> > > 2011/6/26 Tobias Eisentrager <te...@googlemail.com>:
> > >> Hello Group - this is my private email address.
> > >>
> > >> I have already asked this on
> > >>
> >
> http://stackoverflow.com/questions/6466783/access-another-managed-bean-in-jsf2-1-with-servlet-2-4
> > >> and have not gotten a sufficient answer yet.
> > >>
> > >> We have recently upgraded from JSF 1.2 to 2.1. We are running on
> > >> WebSphere 6.1 which has Servlet 2.4
> > >>
> > >> We are using the following libraries: myfaces 2.1.1 el-api-2.2
> > >>
> > >> Now the only problem we have is that we cannot access the other
> > >> Backing Beans like we did before with:
> > >>
> > >> public static Object getBackingBean( String pName ) {
> > >>   ELContext elContext =
> > FacesContext.getCurrentInstance().getELContext();
> > >>   Object ret = elContext.getELResolver().getValue(elContext, null,
> > pName);
> > >>   return ret;
> > >> }
> > >>
> > >> This will always return null. We have also tried:
> > >>
> > >> Beanclass bean = (Beanclass)
> > FacesContext.getCurrentInstance().getApplication()
> > >> .getELResolver().getValue(elContext, null, "beanclass");
> > >>
> > >> which return null as well.
> > >>
> > >> We have tried the @ManagedProperty annotation but this is apparently a
> > >> Servlet 2.5 feature. Is it possible that the ELContext uses DI now by
> > >> default? Is there a way to get an Instance of another backing Bean in
> > >> JSF2.1 and Servlet 2.4?
> > >>
> > >> Thanks!
> > >>
> > >> Toby
> > >>
> > >
> > >
> > >
> > > --
> > > Jakob Korherr
> > >
> > > blog: http://www.jakobk.com
> > > twitter: http://twitter.com/jakobkorherr
> > > work: http://www.irian.at
> > >
> >
>



-- 
Rudy De Busscher
http://www.c4j.be