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]