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]