Hi Yohan, I prefer to use my own cancel button(using get instead of post) inspired(read copied/cheated/learnt) from the chenillekit's button.
@Import(library = "cancel-form.js") public class Cancel implements ClientElement { /** * JavaScript id to be used. If id is not supplied, it will be auto-generated */ @Parameter(value = "prop:componentResources.id", defaultPrefix = BindingConstants.LITERAL) private String clientId; /** * Text to be displayed on the button. It is used at the content of the * <button> tag */ @Parameter(value = "Cancel", defaultPrefix = BindingConstants.LITERAL, required = true, allowNull = false) private String value; /** * Zone to update */ @Parameter(defaultPrefix = BindingConstants.LITERAL) private String zone; @Inject private ComponentResources componentResources; @Inject private JavaScriptSupport javaScriptSupport; private String assignedClientId; @Parameter private Object[] context; public String getClientId() { return assignedClientId; } void setupRender() { assignedClientId = javaScriptSupport.allocateClientId(clientId); } boolean beginRender(MarkupWriter writer) { writer.element("button", "type", "button", "id", getClientId()); writer.write(value); writer.end(); addJavaScript(); return false; } private void addJavaScript() { JSONObject params = new JSONObject(); params.put("zone", zone); params.put("elementId", getClientId()); params.put("url", getCancelURL()); javaScriptSupport.addInitializerCall("cancelForm", params); } private String getCancelURL() { return componentResources.createEventLink("cancel", context).toAbsoluteURI(); } } Tapestry.Initializer.cancelForm = function(params) { var element = $(params.elementId); Event.observe(element, "click", function(event) { event.preventDefault(); var form = $(element).up("form"); if($T(form).zoneId) { var zoneManager = Tapestry.findZoneManager(form); if(zoneManager != null) { zoneManager.updateFromURL(params.url); return; } } // Not within a form window.location.href = params.url; }); }; Tapestry.Initializer.cancelForm = function(params) { var element = $(params.elementId); Event.observe(element, "click", function(event) { event.preventDefault(); var form = $(element).up("form"); if($T(form).zoneId) { var zoneManager = Tapestry.findZoneManager(form); if(zoneManager != null) { zoneManager.updateFromURL(params.url); return; } } // Not within a form window.location.href = params.url; }); }; Hope it helps On Tue, Sep 6, 2011 at 10:30 AM, Steve Eynon <steve.ey...@alienfactory.co.uk> wrote: > Yay! I'm happy I'm not the only one who's noticed this! > > [T5.3-beta-1] Submit buttons with t:mode="cancel" do not submit the form > http://tapestry.markmail.org/message/5yrkjtm2nfevear5 > > I to, would like someone in the know to confirm whether this is > desired behaviour (I'm thinking it's not, but then again, I'm also > pretty stoopid). > > But, err, I don't know what the workaround is. > > For those who want the "Canceled" event to fire in T5.3, remove the > t:mode="cancel" attribute (so the form submits!), ensure your cancel > button has t:id="cancel" and add the following to your Module: > > public static void > contributeFactoryDefaults(MappedConfiguration<String, Object> > configuration) { > // remove "cancel" from the list of reserved names > configuration.override(InternalSymbols.PRE_SELECTED_FORM_NAMES, > "reset,submit,select,id,method,action,onsubmit"); > } > > The downside being you can now only have one Cancel button per form > and, as in T5.2.6, you either have to turn off client side validation > for the whole form: > > <t:form t:clientValidation="false" ... > > or for the whole application: > > public static void > contributeApplicationDefaults(MappedConfiguration<String, String> > configuration) { > configuration.add(SymbolConstants.FORM_CLIENT_LOGIC_ENABLED, "false"); > } > > Steve. > > > On 6 September 2011 12:15, Yohan Yudanara <yohan.yudan...@gmail.com> wrote: >> oo sorry, I forgot to mention. >> I'm using Tapestry 5.2.6 >> >> On Tue, Sep 6, 2011 at 11:13 AM, Yohan Yudanara >> <yohan.yudan...@gmail.com>wrote: >> >>> Hi.. >>> >>> I want to use submit button which can bypass client validation. >>> Having read this documentation: >>> http://tapestry.apache.org/current/tapestry-core/ref/org/apache/tapestry5/corelib/components/Submit.html, >>> I was trying to use Submit component with mode="cancel" like this: >>> >>> <t:form t:id="form"> >>> <t:textfield t:id="testField" t:value="testField" >>> t:validate="required" /> >>> <t:submit value="normal submit"/> >>> <t:submit mode="cancel" value="cancel submit"/> >>> </t:form> >>> >>> But, when I click "cancel submit", nothing happen (form is not submitted to >>> server). >>> If I click "normal submit" after "cancel submit", the form is submitted to >>> server without client validation. >>> >>> Why do I should click two buttons ( "cancel" and then "normal" submit) to >>> bypass client validation? >>> Is it a bug? >>> "Cancel submit" supposed to directly submit form to server, isn't it? >>> Is there a simple workaround for this? >>> >>> Thanks in advance, >>> >>> Best regards, >>> Yohan Yudanara >>> >> > > --------------------------------------------------------------------- > To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org > For additional commands, e-mail: users-h...@tapestry.apache.org > > -- Regards Taha Hafeez Siddiqi (tawus) http://tawus.wordpress.com --------------------------------------------------------------------- To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org