>From Glen <[EMAIL PROTECTED]>: > > This worked wonderfully thanks... > > One curiousity... The "public static final char PREFIX = '*';" Does > this have to be globally unique among all the SqueezeAdaptor's? I am > assuming this must be unique to the squeeze adapter and that tapestry > will use this to differentiate what adaptor created the squeezed string > and hence what adaptor should unsqeeze the string.
You're right > > Are there any guidelines about what prefixes are already taken? > See the adaptors in package o.a.tapestry.util.io or in http://jakarta.apache.org/tapestry/tapestry/clover/org/apache/tapestry/util/io/pkg-classes.html Also, X is reserved for null, see o.a.t.util.io.DataSqueezerImpl The prefix should also be between characters '!' and 'z' > > > > Paul Cantrell wrote: > > I've done this, and it works quite well. You need to implement the > > interface org.apache.tapestry.util.io.SqueezeAdaptor, something like > > this: > > > > public class DomainObjectSqueezeAdaptor > > implements SqueezeAdaptor > > { > > public static final char PREFIX = '*'; > > private static final Pattern squeezeFormat = Pattern.compile("\\* > > ([A-Za-z0-9_\\.\\$]+)_([0-9]+)"); > > > > public String getPrefix() > > { return String.valueOf(PREFIX); } > > > > public Class getDataClass() > > { return DomainObject.class; } > > > > public String squeeze(DataSqueezer squeezer, Object data) > > { return squeeze(data); } > > > > public static String squeeze(Object data) > > { > > return PREFIX > > + data.getClass().getName() > > + '_' > > + ((DomainObject) data).getId(); > > } > > > > public DomainObject unsqueeze(DataSqueezer squeezer, String s) > > { return unsqueeze(s); } > > > > public static DomainObject unsqueeze(String s) > > { > > Matcher matcher = squeezeFormat.matcher(s); > > if(!matcher.matches()) > > throw new IllegalArgumentException("Unable to parse > > squeezed ID: " + s); > > String className = matcher.group(1); > > String id = matcher.group(2); > > > > Class type; > > try { type = Class.forName(className); } > > catch(ClassNotFoundException e) > > { throw new IllegalArgumentException("Unable to parse > > squeezed ID " + s, e); } > > > > return HibernateHelper.fromId((Class<? extends > > DomainObject>) type, id); > > } > > } > > > > Then add this to your hivemodule.xml: > > > > <contribution configuration-id="tapestry.data.SqueezeAdaptors"> > > <adaptor > > object="instance:net.innig.core.web.tapestry.DomainObjectSqueezeAdaptor" > > /> > > </contribution> > > > > Cheers, > > > > Paul > > > > > > On Dec 9, 2005, at 11:45 AM, Glen wrote: > > > > > >>I am converting a pre-existing webapp to use Tapestry 4.0. It uses > >>hibernate for the business objects and long's for the uid's on those > >>objects. I would like to use tapestry to coerce from the uid as a > >>string into the actual business object > >> > >>Ultimately what I want to be able to do is to write a direct link like > >>this... > >> > >> > >><span jwcid="@DirectLink" listener="listener:gotoDetails" > >>parameters="ognl:bizObject">view details</span> > >> > >>public void gotoDetails( BizObject bizObject ) { > >> // rest of code goes here > >>} > >> > >>instead of how I am currently doing it as follows... > >> > >><span jwcid="@DirectLink" listener="listener:gotoDetails" > >>parameters="ognl:bizobject.uid">view details</span> > >> > >>public void gotoDetails( Long uid ) { > >> BizObject bizObject = DAO.getBizObject( uid ); > >>} > >> > >> > >>I know I need to use the tapestry.coerce.ValueConverter service. Can > >>anyone point me in the right direction as to how I would implement > >>this? > >> > >> > >> > >>--------------------------------------------------------------------- > >>To unsubscribe, e-mail: [EMAIL PROTECTED] > >>For additional commands, e-mail: [EMAIL PROTECTED] > >> > >> > > > > > > _________________________________________________________________ > > Piano music podcast: http://inthehands.com > > Other interesting stuff: http://innig.net > > > > > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: [EMAIL PROTECTED] > > For additional commands, e-mail: [EMAIL PROTECTED] > > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > -- --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
