/* * Copyright 2001-2006 Geert Bevin * Distributed under the terms of either: * - the common development and distribution license (CDDL), v1.0; or * - the GNU Lesser General Public License, v2.1 or later * $Id: Counter.java 3364 2006-07-10 10:33:29Z gbevin $ */ import com.uwyn.rife.engine.Element; import com.uwyn.rife.engine.annotations.Datalink; import com.uwyn.rife.engine.annotations.Elem; import com.uwyn.rife.engine.annotations.InputProperty; import com.uwyn.rife.engine.annotations.OutputProperty; import com.uwyn.rife.engine.annotations.SubmissionHandler; import com.uwyn.rife.template.Template; @Elem( // Setting an empty URL, makes the submissions target the element that embeds // the embedded Counter elements. Without this declaration, each embedded // element would become the main element after the submission (since it has // its own URL). url="", // This data link connects the 'counter' output to the 'counter' value. The // element might have changed the counter property value in the meantime // (after an 'increase' or 'decrease' submission). The reflective datalink // will pass the output value to the input at the next submission. datalinks = {@Datalink(srcOutput="counter", destInput="counter", destClass=Counter.class)} ) public class Counter extends Element { private int counter; @InputProperty public void setCounter(int counter) { this.counter = counter; } @OutputProperty public int getCounter() { return counter; } @SubmissionHandler public void doDecrease() { counter--; processElement(); } @SubmissionHandler public void doIncrease() { counter++; processElement(); } public void processElement() { Template t = getHtmlTemplate("counter"); t.setValue("counter", counter); print(t); } }