But this stuff is so cool, it's got me thinking about using it deep in my model code too. Simplify and generalise at the same time - I like that!
-- Martin Cooper > -----Original Message----- > From: Craig R. McClanahan [mailto:[EMAIL PROTECTED]] > Sent: Friday, July 12, 2002 7:24 PM > To: Struts Users Mailing List > Cc: [EMAIL PROTECTED] > Subject: RE: DynaBeans, DynaClass, DynaMen > > > > > On Fri, 12 Jul 2002, Martin Cooper wrote: > > > Date: Fri, 12 Jul 2002 17:03:24 -0700 > > From: Martin Cooper <[EMAIL PROTECTED]> > > Reply-To: Struts Users Mailing List <[EMAIL PROTECTED]> > > To: 'Struts Users Mailing List' <[EMAIL PROTECTED]> > > Subject: RE: DynaBeans, DynaClass, DynaMen > > > > Cool beans! (Yes, pun intended - it's Friday, right? :) > > > > Yep -- DynaBeans are dyna enough for all sorts of stuff :-). > > I just finished working on one more refinement to help Struts > folks copy > properties from a form bean to a model bean (complete with type > conversion) without the strange things that > BeanUtils.populate() does). > Check out the new BeanUtils.copyProperties() method in tonight's > (20020713) nightly build. > > > -- > > Martin Cooper > > > > Craig > > > > > > -----Original Message----- > > > From: Craig R. McClanahan [mailto:[EMAIL PROTECTED]] > > > Sent: Friday, July 12, 2002 3:45 PM > > > To: Struts Users Mailing List > > > Subject: RE: DynaBeans, DynaClass, DynaMen > > > > > > > > > I implemented something a little more memory-efficient than > > > this (doesn't > > > require the entire result set to be in memory) in tonight's > > > nightly build > > > of commons-beanutils, which will therefore be available in > > > the 20020713 > > > nightly build of Struts. You use it something like this: > > > > > > Connection conn = ...; > > > Statement stmt = conn.createStatement(); > > > ResultSet rs = stmt.executeQuery("select * from customers"); > > > Iterator rows = (new ResultSetDynaClass(rs)).iterator(); > > > while (rows.hasNext()) { > > > DynaBean row = (DynaBean) rows.next(); > > > System.out.println("Processing customer " + > > > row.get("account_id")); > > > ... access this row as a DynaBean ... > > > } > > > rs.close(); > > > stmt.close(); > > > > > > I elected to avoid doing the type conversions, so the > > > properties you get > > > back will correspond to their types in the database. > > > > > > Craig > > > > > > > > > On Fri, 12 Jul 2002 [EMAIL PROTECTED] wrote: > > > > > > > Date: Fri, 12 Jul 2002 13:56:38 -0400 > > > > From: [EMAIL PROTECTED] > > > > Reply-To: Struts Users Mailing List > <[EMAIL PROTECTED]> > > > > To: [EMAIL PROTECTED] > > > > Subject: RE: DynaBeans, DynaClass, DynaMen > > > > > > > > > > > > > > > > Here is what I am using... Very simple and only > returns strings... > > > > > > > > > > > > /** > > > > * Converts a resultset into an ArrayList of DynaBeans > > > > * > > > > * @param resultSet SQL result set to be converted > > > > * @return ArrayList of DynaBeans with all columnnames > > > converted to > > > > * lowercase > > > > * @throws SQLException DOCUMENT ME! > > > > */ > > > > private static ArrayList getDynaBeanArrayList(ResultSet > > > resultSet) > > > > throws SQLException { > > > > > > > > ResultSetMetaData metaData = resultSet.getMetaData(); > > > > int cols = metaData.getColumnCount(); > > > > ArrayList list = new ArrayList(); > > > > DynaProperty[] props = new DynaProperty[cols]; > > > > BasicDynaClass dClass = null; > > > > > > > > for (int i = 1; i <= cols; i++) { > > > > props[i - 1] = new > > > > DynaProperty(metaData.getColumnName(i).toLowerCase()); > > > > } > > > > > > > > try { > > > > dClass = new BasicDynaClass("test", > > > > Class.forName( > > > > > > > > "org.apache.commons.beanutils.BasicDynaBean"), > > > > props); > > > > } catch (Exception e) { > > > > e.printStackTrace(); > > > > } > > > > > > > > while (resultSet.next()) { > > > > > > > > HashMap map = new HashMap(cols, 1); > > > > > > > > for (int i = 1; i <= cols; i++) { > > > > map.put(metaData.getColumnName(i).toLowerCase(), > > > > resultSet.getString(i)); > > > > } > > > > > > > > try { > > > > > > > > DynaBean dbean = dClass.newInstance(); > > > > BeanUtils.populate(dbean, map); > > > > list.add(dbean); > > > > } catch (Exception e) { > > > > e.printStackTrace(); > > > > throw new SQLException("RequestUtils.getArrayList: " > > > > + e.toString()); > > > > } > > > > } // End While > > > > > > > > return (list); > > > > } > > > > > > > > > > > > -----Original Message----- > > > > From: craigmcc [mailto:[EMAIL PROTECTED]] > > > > Sent: Friday, July 12, 2002 12:07 PM > > > > To: struts-user > > > > Subject: Re: DynaBeans, DynaClass, DynaMen > > > > > > > > > > > > > > > > > > > > On Fri, 12 Jul 2002, Thorbjoern Ravn Andersen wrote: > > > > > > > > > Date: Fri, 12 Jul 2002 07:02:57 +0200 > > > > > From: Thorbjoern Ravn Andersen <[EMAIL PROTECTED]> > > > > > Reply-To: Struts Users Mailing List > > > <[EMAIL PROTECTED]> > > > > > To: Struts Users Mailing List <[EMAIL PROTECTED]> > > > > > Subject: Re: DynaBeans, DynaClass, DynaMen > > > > > > > > > > [EMAIL PROTECTED] skrev: > > > > > > > > > > >...anyone remember DynaMen? > > > > > > > > > > > >Anyhow... I got a Dynabean mechanism working that > > > builds a DynaBean > > > > > >based on the metadata of a SQL result set, populates and > > > array of the > > > > > >little buggers and passes it back to me. For displaying > > > I have a tag > > > > > >library that does not like a call to get('name') as the > > > field name. > > > > > >What is the best way to get around this? > > > > > > > > > > > I wrote an AnonyBeans package which uses BCEL to generate > > > beans on the > > > > > fly based on a ResultSet. It is alpha code but works for > > > me, and is > > > > > usable anywhere where you need a real traditional bean, > > > but where you > > > > do > > > > > not want to serialize it or use its type in Java source. > > > > > > > > > > Is this interesting? > > > > > > > > > > > > > I think it would be interestesting, even though it might not be > > > > universally useful (some containers won't let you introduce > > > new classes > > > > at > > > > runtime). > > > > > > > > I'd also be interested in a mechanism that converted a > > > ResultSet into a > > > > custom DynaClass, with a corresponding DynaBean for > each row. This > > > > would > > > > be trivially simple to do -- so simple that it probably makes a > > > > worthwhile > > > > addition to commons-beanutils itself if someone wanted to > > > take this on. > > > > > > > > This wouldn't help you create dynamic input forms, but it > > > would make a > > > > completely flexible bean-like wrapper around a result set > > > so you can use > > > > Struts tags to display stuff. > > > > > > > > > -- > > > > > Thorbjørn Ravn Andersen http://biobase.dk/~tra > > > > > > Craig > > > > > > > > > -- > > > To unsubscribe, e-mail: > > > <mailto:[EMAIL PROTECTED]> > > > For additional commands, e-mail: > > > <mailto:[EMAIL PROTECTED]> > > > > > > > > > > > > -- > > > To unsubscribe, e-mail: > <mailto:[EMAIL PROTECTED]> > > For additional commands, e-mail: > <mailto:[EMAIL PROTECTED]> > > > > > > > -- > To unsubscribe, e-mail: > <mailto:[EMAIL PROTECTED]> > For additional commands, e-mail: > <mailto:[EMAIL PROTECTED]> > > > > -- > To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> > For additional commands, e-mail: <mailto:[EMAIL PROTECTED]> > > -- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]> -- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>