Thanks for all the help. Embedding the dataScroller and dataTable within
another JSF component worked.

-----Original Message-----
From: Mike Kienenberger [mailto:[EMAIL PROTECTED] 
Sent: Tuesday, December 06, 2005 10:24 AM
To: MyFaces Discussion
Subject: Re: naming conventions in faces-config.xml

Oops.  I hadn't realized that we'd moved off the mailing list to private
email.
Yes, the problem is that he has superclass methods for
get/setDataSource.

---------- Forwarded message ----------
From: Mike Kienenberger <[EMAIL PROTECTED]>
Date: Dec 5, 2005 10:12 PM
Subject: Re: naming conventions in faces-config.xml
To: "[EMAIL PROTECTED]" <[EMAIL PROTECTED]>


Aha!

You've changed the name of the method.

Is there already a get/setDataSource(javax.sql.DataSource) method
defined in the superclass?  There must be because you're calling it
from this method!   So there's no way for JSF to know which one to
use.   I'm guessing it's using the one which has a defined getter.
The problem might go away if you create a matching getter...then
again, it might not.

The safest solution is to not overload the getDataSource method and
use getJDBCDataSource (or getDs) instead.

On 12/5/05, [EMAIL PROTECTED] <[EMAIL PROTECTED]> wrote:
> Mike,
>
> thank you for your patience and effort trying to resolve this issue.
> I just changed the essential parts to reproduce the error.
> Here's the setter in CasesJdbcDAO:
>
> public void setDataSource(JDBCDataSource dataSource) {
>   if (log.isDebugEnabled()) log.debug("setting dataSource in
casesDAO");
>   this.ds = dataSource;
>   //the dataSource has to be updated after the bean has been injected
>   this.setDataSource(this.ds.getDs());
> }
>
> and the correlating snipplet of the faces-config.xml configuration
file:
> <managed-bean>
>   <description>this one retrieves the cases</description>
>   <managed-bean-name>casesDAOBean</managed-bean-name>
>
>
<managed-bean-class>com.edegger.dao.springJDBC.CasesJdbcDAO</managed-bea
n-class>
>   <managed-bean-scope>session</managed-bean-scope>
>   <managed-property>
>     <property-name>dataSource</property-name>
>     <value>#{jdbcDataSourceBean}</value>
>   </managed-property>
> </managed-bean>
>
> Since the field ds is only used within the class CasesJdbcDAO, I don't
need an
> getter for this property.
> And finally the signature of the class is:
>
> public class CasesJdbcDAO extends JdbcDaoSupport implements CasesDAO {
>
> whereas CasesDAO is the interface defining a methode to get all the
cases as a
> list.
> With this configuration, I'm getting the
'javax.servlet.jsp.el.ELException:
> Attempt to coerce a value of type
"com.edegger.dao.springJDBC.JDBCDataSource"
> to type "javax.sql.DataSource"' exception.
>
> To get rid off this exception, I'll need to apply the following
chances:
>
> public void setDs(JDBCDataSource dataSource) {
>   if (log.isDebugEnabled()) log.debug("setting dataSource in
casesDAO");
>   this.ds = dataSource;
>   //the dataSource has to be updated after the bean has been injected
>   this.setDataSource(this.ds.getDs());
> }
>
> and the correlating snipplet of the faces-config.xml configuration
file:
> <managed-bean>
>   <description>this one retrieves the cases</description>
>   <managed-bean-name>casesDAOBean</managed-bean-name>
>
>
<managed-bean-class>com.edegger.dao.springJDBC.CasesJdbcDAO</managed-bea
n-class>
>   <managed-bean-scope>session</managed-bean-scope>
>   <managed-property>
>     <property-name>ds</property-name>
>     <value>#{jdbcDataSourceBean}</value>
>   </managed-property>
> </managed-bean>
>
> The signature stays the same.
>
> I know something's not adding up - but I can't explain it.
>
> Enjoy,
>
>   Kurt
>
>
>
>
> Quoting Mike Kienenberger <[EMAIL PROTECTED]>:
>
> > Kurt, what does both your setter and getter code and method
signatures
> > look like on CasesJdbcDAO when you're getting this error?
> >
> > 'javax.servlet.jsp.el.ELException: Attempt to coerce a value of type
> > "JDBCDataSource" to type "javax.sql.DataSource"' indicates an
attempt
> > to inject a JDBCDataSource into a value binding expecting a
> > javax.sql.DataSource.
> >
> > Something's not adding up here.
> >
> > On 12/5/05, Kurt Edegger <[EMAIL PROTECTED]> wrote:
> > > Hi Mike,
> > >
> > > thank you for your help, but I don't think that your answer is
correct.
> > > We are talking about two different classes. The first one is
> > > CasesJdbcDAO with the setter taking an JDBCDataSource Object and
the
> > > second on is the JDBCDataSource class having a getDs() method to
return
> > > the actual javax.sql.DataSource object. To clearify: The
JDBCDataSource
> > > object is injected to CasesJdbcDAO using the setter in
CasesJdbcDAO
> > > which takes the correct type of JDBCDataSource.
> > > I don't think this is an issue of a misscasted type since it works
if
> > > the field in CasesJdbcDAO (marked as [1] in my former postings)
isn't
> > > named 'dataSource'. In that case the JSF implementation seems to
> > > interpret the name as a type and causing the exception. In the
case it
> > > isn't named 'dataSource' (e.g. 'ds' in my example) the injection
is done
> > > without any problems.
> > >
> > > I'm appreciating your help and thoughts.
> > >
> > > Kurt
> > >
> > >
> > >
> > > on 12/5/2005 8:54 AM Mike Kienenberger stated:
> > > > Your setter and getter return different types.
> > > >
> > > >  public DataSource getDs()
> > > >
> > > > needs to be
> > > >
> > > >  public JDBCDataSource getDs() {
> > > >
> > > > On 12/2/05, Kurt Edegger <[EMAIL PROTECTED]> wrote:
> > > >
> > > >>Hi Mike,
> > > >>
> > > >>thank you for your response.
> > > >>
> > > >>on 12/2/2005 7:30 AM Mike Kienenberger stated:
> > > >> > Can you post the setter method for ds in CasesJdbcDAO?
> > > >>
> > > >>Here are the crucial parts of CasesJdbcDAO:
> > > >>/* the field definition [1]*/
> > > >>private JDBCDataSource ds;
> > > >>
> > > >>/* the setter*/
> > > >>public void setDs(JDBCDataSource dataSource) {
> > > >>   this.ds = dataSource;
> > > >>   this.setDataSource(this.ds.getDs());
> > > >>}
> > > >>
> > > >> > Also can you post the class definition line for
JDBCDataSource?
> > > >>The JDBCDataSource class is very simple and just holds an
> > > >>javax.sql.DataSource object. Here are the interesting parts:
> > > >>
> > > >>/*the class definition */
> > > >>public class JDBCDataSource{
> > > >>
> > > >>     /*the javax.sql.DataSource*/
> > > >>     private DataSource ds;
> > > >>     private String jndiLookup;
> > > >>...
> > > >>
> > > >>     public DataSource getDs() {
> > > >>         doLookup();
> > > >>         return ds;
> > > >>     }
> > > >>
> > > >>}
> > > >>
> > > >>
> > > >>The issue again: If I change the name of the field in
CasesJdbcDAO at
> > > >>position [1] to dataSource, and adjust the injection in
faces-config.xml
> > > >>accordingly the application crashes with the stated exception.
> > > >>
> > > >>Any ideas?
> > > >>
> > > >>     Kurt
> > > >>
> > >
> > >
> >
>
>
>
>
>


On 12/5/05, Simon Kitching <[EMAIL PROTECTED]> wrote:
> [EMAIL PROTECTED] wrote:
> > Mike,
> >
> > thank you for your patience and effort trying to resolve this issue.
> > I just changed the essential parts to reproduce the error.
> > Here's the setter in CasesJdbcDAO:
> >
> > public void setDataSource(JDBCDataSource dataSource) {
> >   if (log.isDebugEnabled()) log.debug("setting dataSource in
casesDAO");
> >   this.ds = dataSource;
> >   //the dataSource has to be updated after the bean has been
injected
> >   this.setDataSource(this.ds.getDs());
> > }
> >
> > and the correlating snipplet of the faces-config.xml configuration
file:
> > <managed-bean>
> >   <description>this one retrieves the cases</description>
> >   <managed-bean-name>casesDAOBean</managed-bean-name>
> >
> >
<managed-bean-class>com.edegger.dao.springJDBC.CasesJdbcDAO</managed-bea
n-class>
> >   <managed-bean-scope>session</managed-bean-scope>
> >   <managed-property>
> >     <property-name>dataSource</property-name>
> >     <value>#{jdbcDataSourceBean}</value>
> >   </managed-property>
> > </managed-bean>
> >
> > Since the field ds is only used within the class CasesJdbcDAO, I
don't need an
> > getter for this property.
> > And finally the signature of the class is:
> >
> > public class CasesJdbcDAO extends JdbcDaoSupport implements CasesDAO
{
> >
>
> Just as a guess, you don't have any methods on the base classes that
> have similar names or signatures do you? eg:
>
> class JdbcDaoSupport {
>    public void setDataSource(...);
> }
>
>
> Regards,
>
> Simon
> 
 
 
 
NOTICE:  This message, including all attachments transmitted with it, is for 
the use of the addressee only. It may contain proprietary, confidential and/or 
legally privileged information belonging to Litle & Co. No confidentiality or 
privilege is waived or lost by any mistransmission. If you are not the intended 
recipient, you must not, directly or indirectly, use, disclose, distribute, 
print or copy any part of this message.  If you believe you have received this 
message in error, please delete it and all copies of it from your system and 
notify the sender immediately by reply e-mail.  Thank you. 

Reply via email to