Getting user confirmation has been edited by Loren Rosen (Jan 10, 2007).

Change summary:

use AttributeModifier instead of AbstractBehavior

(View changes)

Content:

It's common to want the user to confirm his action if it would be hard to reverse, e.g. if he asked to delete something. Here's one way to do this, using _javascript_:

Link removeLink = new Link("removeLink") {
			@Override
			public void onClick() {
				// do something you want to confirm beforehand
			}
		};

removeLink.add( new SimpleAttributeModifier("onclick", "return confirm('are you sure?');"));

SimpleAttributeModifier will replace any existing onclick handler in the html. We can instead add our _javascript_ to any existing _javascript_ by creating our own AttributeModifier instead of using SimpleAttributeModifier:

public class _javascript_EventConfirmation extends AttributeModifier {

	public _javascript_EventConfirmation(String event, String msg) {
		super(event, true, new Model(msg));
	}

	protected String newValue(final String currentValue,
			final String replacementValue) {
		String result = "return confirm('" + replacementValue + "')";
		if (currentValue != null) {				
			result = currentValue + "; " + result;
		}
		return result;
	}
}

Then we attach the modifier to the link:

removeLink.add(new _javascript_EventConfirmation("onclick", "are you sure?"));

If you are using the same confirmation in more than one link, you should subclass Link to encapsulate the change:

abstract public class ConfirmLink extends Link {
      public ConfirmLink(String id, String msg) {
           super(id);
           add(new _javascript_EventConfirmation("onclick", "are you sure?"));
      }

      @Override
      abstract public void onClick();
			
}

(The subclass could of course use SimpleAttributeModifier instead.)

Reply via email to