Here you go, it's for Tap4 btw: Usage example:
<span jwcid="[EMAIL PROTECTED]" value="ognl:fahrzeug.reserviertBis" listener="listener:onReservierung"/> value is the property to watch, listener will be called at the end of the rewind cycle, if the prop did change. ___________ file Watch.java ____________________ /* * Erstellt am 23.05.2005 von schultma * copyright, 2005 BMW (Schweiz) AG * * $Id: Watch.java,v 1.1 2006/04/13 07:43:55 emeadecentral#schultma Exp $ */ package com.javaforge.honeycomb.tapestry.components; import org.apache.tapestry.IActionListener; import org.apache.tapestry.IMarkupWriter; import org.apache.tapestry.IRequestCycle; import org.apache.tapestry.event.PageBeginRenderListener; import org.apache.tapestry.event.PageEvent; import org.apache.tapestry.form.AbstractFormComponent; import org.apache.tapestry.listener.ListenerInvoker; /** * Renders a hidden field for a given value and registers a listener * to be called on the end of the rewind if the property changed in this * request. * * @author schultma */ public abstract class Watch extends AbstractFormComponent implements PageBeginRenderListener { public abstract IActionListener getListener(); public abstract Object getValue(); public abstract Object getOldValue(); public abstract void setOldValue( Object t ); public abstract ListenerInvoker getListenerInvoker(); @Override protected void renderFormComponent(IMarkupWriter writer, IRequestCycle cycle) { setOldValue( getValue() ); getComponent("hidden").render( writer, cycle ); } @Override protected void rewindFormComponent(IMarkupWriter writer, final IRequestCycle cycle) { getComponent("hidden").render( writer, cycle ); { getForm().addDeferredRunnable( new Runnable() { public void run() { if ( valueChanged() ) { getListenerInvoker().invokeListener( getListener(), Watch.this, cycle ); } };}); } } private boolean valueChanged() { if ( getOldValue() == getValue() ) return false; if ( getOldValue() == null || getValue() == null) return true; return !getValue().equals(getOldValue()); } @Override protected void prepareForRender(IRequestCycle cycle) { super.prepareForRender(cycle); } public void pageBeginRender(PageEvent arg0) { } } ______________ file Watch.jwc _______________________________________________________ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE component-specification PUBLIC "-//Apache Software Foundation//Tapestry Specification 4.0//EN" "http://jakarta.apache.org/tapestry/dtd/Tapestry_4_0.dtd"> <!-- generated by Spindle, http://spindle.sourceforge.net --> <component-specification class="com.javaforge.honeycomb.tapestry.components.Watch" allow-body="no" allow-informal-parameters="no"> <description>Watches a property</description> <parameter name="listener" required="yes" /> <parameter name="value" required="yes" /> <property name="oldValue" /> <component id="hidden" type="Hidden" > <binding name="value" value="ognl:oldValue"/> </component> <inject property="listenerInvoker" object="infrastructure:listenerInvoker"/> </component-specification> --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]