Page Edited :
WICKET :
Getting user confirmation
Getting user confirmation has been edited by Loren Rosen (Jan 11, 2007). Change summary: describe panel replacement approach 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. The confirmation can be easily obtained via a _javascript_ confirm dialog box. If you'd rather not use _javascript_, another approach is outlined below. Using _javascript_Here's one way to do get confirmation, 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.) Without _javascript_If you don't want to use _javascript_, you could bring up a separate web page with a confirmation form in it. But it's possible to display the confirmation request on the form page itself. The idea (due to Ed Eustace) is to use the wicket Component.replaceWith() method to replace some panel on the page with a confirmation panel. First, here's the confirmation panel: public abstract class ConfirmDeletePanel extends Panel { public ConfirmDeletePanel(String id, String message) { super(id); add(new Label("message", message)); add(new Link("confirm") { @Override public void onClick() { onConfirm(); } }); add(new Link("cancel") { @Override public void onClick() { onCancel(); } }); } protected abstract void onCancel(); protected abstract void onConfirm(); } (The corresponding html should be pretty obvious.) Now assume the link to be confirmed is inside a panel called MyPanel. The link has a onClick method that does the panel replacement: Link removeLink = new Link("removeLink") { @Override public void onClick() { MyPanel.this.replaceWith(new ConfirmDeletePanel( MyPanel.this.getId(), "are you sure") { @Override protected void onCancel() { this.replaceWith(MyPanel.this); } @Override protected void onConfirm() { // do something you want confirmed beforehand // .... then this.replaceWith(MyPanel.this); } }); } }; |
Unsubscribe or edit your notifications preferences