myfaces-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Howard W. Smith, Jr." <smithh032...@gmail.com>
Subject Re: Migrating to CDI: injecting stateless/facade in Converter via facescontext
Date Tue, 20 Nov 2012 12:56:30 GMT
The goal was to inject bean in facesconverter via CDI, but I don't have
this need anymore, since faces converter is not an eligible injection
point, so I opted to use request scoped JSF managed beans that have
facesconverter defined within the bean. That's working fine. Thanks.

Okay, I can cc myfaces user group as well, going forward. :-)
 On Nov 20, 2012 7:37 AM, "Romain Manni-Bucau" <rmannibucau@gmail.com>
wrote:

> i'm still not clear about your goal and where you need injection
>
> maybe share a (runnable) sample to show us what you are talking about
>
> side note: myfaces list can help you a lot about it too
>
> *Romain Manni-Bucau*
> *Twitter: @rmannibucau <https://twitter.com/rmannibucau>*
> *Blog: **http://rmannibucau.wordpress.com/*<
> http://rmannibucau.wordpress.com/>
> *LinkedIn: **http://fr.linkedin.com/in/rmannibucau*
> *Github: https://github.com/rmannibucau*
>
>
>
>
> 2012/11/20 Howard W. Smith, Jr. <smithh032772@gmail.com>
>
> > Interesting, that will allow you to get instance of beans, if already
> > instantiated, and that could have helped in converter, only if beans
> > already injected earlier?
> > On Nov 20, 2012 7:11 AM, "Romain Manni-Bucau" <rmannibucau@gmail.com>
> > wrote:
> >
> > > was thinking to
> > >
> >
> http://docs.oracle.com/javaee/6/api/javax/faces/context/FacesContext.html
> > > getAttributes()
> > > method (depend a bit on your real need)
> > >
> > > *Romain Manni-Bucau*
> > > *Twitter: @rmannibucau <https://twitter.com/rmannibucau>*
> > > *Blog: **http://rmannibucau.wordpress.com/*<
> > > http://rmannibucau.wordpress.com/>
> > > *LinkedIn: **http://fr.linkedin.com/in/rmannibucau*
> > > *Github: https://github.com/rmannibucau*
> > >
> > >
> > >
> > >
> > > 2012/11/20 Howard W. Smith, Jr. <smithh032772@gmail.com>
> > >
> > > > Faces context? Please explain.
> > > >  On Nov 20, 2012 1:56 AM, "Romain Manni-Bucau" <
> rmannibucau@gmail.com>
> > > > wrote:
> > > >
> > > > > You cant use faces context?
> > > > > Le 20 nov. 2012 03:01, "Howard W. Smith, Jr." <
> > smithh032772@gmail.com>
> > > a
> > > > > écrit :
> > > > >
> > > > > > For minimal changes, I'm adding FacesConverter to JSF
> requestscoped
> > > > > > managedBean's as per the Stackoverflow answer below:
> > > > > >
> > > > > > How can I inject in @FacesConverter?<
> > > > > > http://stackoverflow.com/a/13156834/933054>
> > > > > >
> > > > > > Yes, this means more classes in the project, but honestly, I
have
> > not
> > > > had
> > > > > > to spend much time 'maintaining' my Converter classes at all.
I
> > just
> > > > > tested
> > > > > > this concept, and I'm not experiencing this exceptioin any more.
> > > > > >
> > > > > > While testing the above, I see more exceptions to resolve related
> > to
> > > > > > migrating to CDI. Will let you all know, if I have any more
> > > questions.
> > > > > >
> > > > > > Thanks for all the responses/help, so far. :)
> > > > > >
> > > > > >
> > > > > >
> > > > > > On Mon, Nov 19, 2012 at 7:20 PM, Romain Manni-Bucau
> > > > > > <rmannibucau@gmail.com>wrote:
> > > > > >
> > > > > > > If it is a nested class you need it otherwise (class foo
in
> > > foo.java
> > > > > > file)
> > > > > > > you dont need it
> > > > > > > Le 20 nov. 2012 01:16, "Howard W. Smith, Jr." <
> > > > smithh032772@gmail.com>
> > > > > a
> > > > > > > écrit :
> > > > > > >
> > > > > > > > Good question. I removed 'static', because I didn't
see it in
> > the
> > > > > code
> > > > > > at
> > > > > > > > following URLs:
> > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> https://cwiki.apache.org/confluence/display/EXTCDI/JSF+Usage#JSFUsage-DependencyInjection
> > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> http://stackoverflow.com/questions/7531449/cdi-injection-into-a-facesconverter
> > > > > > > >
> > > > > > > > https://issues.apache.org/jira/browse/EXTCDI-127
> > > > > > > >
> > > > > > > >
> > > > > > > > On Mon, Nov 19, 2012 at 4:30 PM, Romain Manni-Bucau
> > > > > > > > <rmannibucau@gmail.com>wrote:
> > > > > > > >
> > > > > > > > > Why removing static? It means it is no more manageable
by
> cdi
> > > > (cdi
> > > > > > cant
> > > > > > > > do
> > > > > > > > > a new on it)
> > > > > > > > > Le 19 nov. 2012 22:13, "Howard W. Smith, Jr."
<
> > > > > > smithh032772@gmail.com>
> > > > > > > a
> > > > > > > > > écrit :
> > > > > > > > >
> > > > > > > > > > @Advanced was found in the following:
> > > > > > > > > >
> > > > > > > > > > import
> org.apache.myfaces.extensions.cdi.core.api.Advanced;
> > > > > > > > > >
> > > > > > > > > > After some tinkering, I removed 'static'
from the
> following
> > > > > > > definition,
> > > > > > > > > >
> > > > > > > > > > public static class AddressTypeControllerConverter
> > implements
> > > > > > > > Converter {
> > > > > > > > > >
> > > > > > > > > > I also added @Advanced to the FacesConverter/Converter,
> and
> > > > > latest
> > > > > > > > error
> > > > > > > > > is
> > > > > > > > > > the following:
> > > > > > > > > >
> > > > > > > > > > Nov 19, 2012 4:08:21 PM
> > > > > > javax.faces.component._ExternalSpecifications
> > > > > > > > > > isBeanValidationAvailable
> > > > > > > > > > INFO: MyFaces Bean Validation support enabled
> > > > > > > > > > Nov 19, 2012 4:08:21 PM
> > > > > > > org.apache.myfaces.application.ApplicationImpl
> > > > > > > > > > internalCreateConverter
> > > > > > > > > > SEVERE: Could not instantiate converter
class
> > > > > > > > > >
> > > > > jsf.address.pf_AddressTypeController$AddressTypeControllerConverter
> > > > > > > > > > java.lang.InstantiationException:
> > > > > > > > > >
> > > > > jsf.address.pf_AddressTypeController$AddressTypeControllerConverter
> > > > > > > > > >
> > > > > > > > > >
> > > > > > > > > >
> > > > > > > > > > On Mon, Nov 19, 2012 at 3:07 PM, Howard
W. Smith, Jr. <
> > > > > > > > > > smithh032772@gmail.com> wrote:
> > > > > > > > > >
> > > > > > > > > > > I searched google, found the following:
> > > > > > > > > > >
> > > > > > > > > > > CDI Injection into a FacesConverter<
> > > > > > > > > >
> > > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> http://stackoverflow.com/questions/7531449/cdi-injection-into-a-facesconverter
> > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > > > which lead me to:
> > > > > > > > > > >
> > > > > > > > > > > MyFaces Extensions CDI > JSF Usage
> Dependency
> > Injection<
> > > > > > > > > >
> > > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> https://cwiki.apache.org/confluence/display/EXTCDI/JSF+Usage#JSFUsage-DependencyInjection
> > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > > > but I don't which library to import
for @Advanced.
> > > > > > > > > > >
> > > > > > > > > > > If @Advanced can be used (since I am
using CODI), then
> > this
> > > > > would
> > > > > > > be
> > > > > > > > > > great.
> > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > > > On Mon, Nov 19, 2012 at 2:56 PM, Romain
Manni-Bucau <
> > > > > > > > > > rmannibucau@gmail.com
> > > > > > > > > > > > wrote:
> > > > > > > > > > >
> > > > > > > > > > >> Maybe use BeanProvider of deltaspike
> > > > > > > > > > >> Le 19 nov. 2012 20:50, "Howard
W. Smith, Jr." <
> > > > > > > > smithh032772@gmail.com
> > > > > > > > > >
> > > > > > > > > > a
> > > > > > > > > > >> écrit :
> > > > > > > > > > >>
> > > > > > > > > > >> > Hmmm... after thinking about
it, I remembered to use
> > > > @Inject
> > > > > > on
> > > > > > > > the
> > > > > > > > > > bean
> > > > > > > > > > >> > which I want to inject. So,
I did the following:
> > > > > > > > > > >> >
> > > > > > > > > > >> >     @FacesConverter(forClass
= AddressType.class)
> > > > > > > > > > >> >     public static class
> AddressTypeControllerConverter
> > > > > > > implements
> > > > > > > > > > >> Converter
> > > > > > > > > > >> > {
> > > > > > > > > > >> >
> > > > > > > > > > >> >         @Inject
> > > > > > > > > > >> >         private pf_AddressTypeController
controller;
> > > > > > > > > > >> >
> > > > > > > > > > >> >         public Object getAsObject(FacesContext
> > > > facesContext,
> > > > > > > > > > UIComponent
> > > > > > > > > > >> > component, String value) {
> > > > > > > > > > >> >             if (value == null
|| value.length() ==
> 0)
> > {
> > > > > > > > > > >> >                 return null;
> > > > > > > > > > >> >             }
> > > > > > > > > > >> >             return
> > > > controller.ejbFacade.find(getKey(value));
> > > > > > > > > > >> >         }
> > > > > > > > > > >> >
> > > > > > > > > > >> > but 'controller' is still
not being injected. I even
> > > tried
> > > > > the
> > > > > > > > same
> > > > > > > > > > for
> > > > > > > > > > >> the
> > > > > > > > > > >> > actual 'ejbFacade' (which
is a stateless bean), but
> > > that,
> > > > > too,
> > > > > > > > > > resulted
> > > > > > > > > > >> in
> > > > > > > > > > >> > a NullPointerException, which
tells me that @Inject
> is
> > > not
> > > > > > > > injecting
> > > > > > > > > > >> > pf_AddressTypeController (@sessionscoped
bean) OR
> > > > ejbFacade
> > > > > > > > > > (@Stateless
> > > > > > > > > > >> > bean instance of AddressTypeFacade).
> > > > > > > > > > >> >
> > > > > > > > > > >> >
> > > > > > > > > > >> > Is there a general practice
used for injecting beans
> > in
> > > > > > > > Converters..
> > > > > > > > > > >> >
> > > > > > > > > > >> >
> > > > > > > > > > >> >
> > > > > > > > > > >> > On Mon, Nov 19, 2012 at 2:38
PM, Romain Manni-Bucau
> > > > > > > > > > >> > <rmannibucau@gmail.com>wrote:
> > > > > > > > > > >> >
> > > > > > > > > > >> > > Can you reproduce it
in a sample? What is on the
> npe
> > > > line?
> > > > > > > > > > >> > > Le 19 nov. 2012 20:25,
"Howard W. Smith, Jr." <
> > > > > > > > > > smithh032772@gmail.com>
> > > > > > > > > > >> a
> > > > > > > > > > >> > > écrit :
> > > > > > > > > > >> > >
> > > > > > > > > > >> > > > I am still migrating
my app from JSF Managed
> beans
> > > to
> > > > > CDI
> > > > > > > > > managed
> > > > > > > > > > >> > beans,
> > > > > > > > > > >> > > so
> > > > > > > > > > >> > > > I am (regression)
testing, and I came across the
> > > > > exception
> > > > > > > > below
> > > > > > > > > > >> when
> > > > > > > > > > >> > > > attempting to add
a record into the database on
> > one
> > > of
> > > > > the
> > > > > > > > xhtml
> > > > > > > > > > >> pages.
> > > > > > > > > > >> > > >
> > > > > > > > > > >> > > > Caused by: java.lang.NullPointerException
> > > > > > > > > > >> > > >         at
> > > > > > > > > > >> > > >
> > > > > > > > > > >> > >
> > > > > > > > > > >> >
> > > > > > > > > > >>
> > > > > > > > > >
> > > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> jsf.address.pf_AddressTypeController$AddressTypeControllerConverter.getAsObject(pf_AddressTypeController.java:283)
> > > > > > > > > > >> > > >
> > > > > > > > > > >> > > >
> > > > > > > > > > >> > > > The exception is
caused by this line below.
> > > > *ejbFacade*
> > > > > > is a
> > > > > > > > > > >> stateless
> > > > > > > > > > >> > > bean
> > > > > > > > > > >> > > > injected by @Inject.
> > > > > > > > > > >> > > >
> > > > > > > > > > >> > > >             return
> > > > > > > controller.*ejbFacade*.find(getKey(value));
> > > > > > > > > > >> > > >
> > > > > > > > > > >> > > >
> > > > > > > > > > >> > > > The code below is
as-is using JSF Managed Beans.
> > > > Please
> > > > > > > advise
> > > > > > > > > on
> > > > > > > > > > >> how I
> > > > > > > > > > >> > > > should update the
following code, so it will
> work
> > > well
> > > > > > with
> > > > > > > > CDI.
> > > > > > > > > > >> > > >
> > > > > > > > > > >> > > >     @FacesConverter(forClass
=
> AddressType.class)
> > > > > > > > > > >> > > >     public static
class
> > > AddressTypeControllerConverter
> > > > > > > > > implements
> > > > > > > > > > >> > > Converter
> > > > > > > > > > >> > > > {
> > > > > > > > > > >> > > >
> > > > > > > > > > >> > > >         public Object
getAsObject(FacesContext
> > > > > > facesContext,
> > > > > > > > > > >> > UIComponent
> > > > > > > > > > >> > > > component, String
value) {
> > > > > > > > > > >> > > >             if (value
== null || value.length()
> ==
> > > 0)
> > > > {
> > > > > > > > > > >> > > >                
return null;
> > > > > > > > > > >> > > >             }
> > > > > > > > > > >> > > >             pf_AddressTypeController
controller
> =
> > > > > > > > > > >> > > > (pf_AddressTypeController)
> > > > > > > > > > >> > facesContext.getApplication().getELResolver().
> > > > > > > > > > >> > > >
> > > > > getValue(facesContext.getELContext(),
> > > > > > > > null,
> > > > > > > > > > >> > > > "pf_addressTypeController");
> > > > > > > > > > >> > > >             return
> > > > > > controller.ejbFacade.find(getKey(value));
> > > > > > > > > > >> > > >         }
> > > > > > > > > > >> > > >
> > > > > > > > > > >> > > >         java.lang.Integer
getKey(String value) {
> > > > > > > > > > >> > > >             java.lang.Integer
key;
> > > > > > > > > > >> > > >             key
= Integer.valueOf(value);
> > > > > > > > > > >> > > >             return
key;
> > > > > > > > > > >> > > >         }
> > > > > > > > > > >> > > >
> > > > > > > > > > >> > > >         String getStringKey(java.lang.Integer
> > > value) {
> > > > > > > > > > >> > > >             StringBuffer
sb = new
> StringBuffer();
> > > > > > > > > > >> > > >             sb.append(value);
> > > > > > > > > > >> > > >             return
sb.toString();
> > > > > > > > > > >> > > >         }
> > > > > > > > > > >> > > >
> > > > > > > > > > >> > > >         public String
getAsString(FacesContext
> > > > > > facesContext,
> > > > > > > > > > >> > UIComponent
> > > > > > > > > > >> > > > component, Object
object) {
> > > > > > > > > > >> > > >             if (object
== null) {
> > > > > > > > > > >> > > >                
return null;
> > > > > > > > > > >> > > >             }
> > > > > > > > > > >> > > >             if (object
instanceof AddressType) {
> > > > > > > > > > >> > > >                
AddressType o = (AddressType)
> > > object;
> > > > > > > > > > >> > > >                
return
> > > > > getStringKey(o.getAddressTypeId());
> > > > > > > > > > >> > > >             } else
{
> > > > > > > > > > >> > > >                
throw new
> > > > > IllegalArgumentException("object
> > > > > > > " +
> > > > > > > > > > >> object
> > > > > > > > > > >> > + "
> > > > > > > > > > >> > > > is of type " + object.getClass().getName()
+ ";
> > > > expected
> > > > > > > type:
> > > > > > > > > " +
> > > > > > > > > > >> > > > pf_AddressTypeController.class.getName());
> > > > > > > > > > >> > > >             }
> > > > > > > > > > >> > > >         }
> > > > > > > > > > >> > > >     }
> > > > > > > > > > >> > > > }
> > > > > > > > > > >> > > >
> > > > > > > > > > >> > >
> > > > > > > > > > >> >
> > > > > > > > > > >>
> > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > >
> > > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message