I've created a patch for submit component https://issues.apache.org/jira/browse/TAPESTRY-2109
ior you can try this component (iti is a modified copy of original Submit) public final class Submit2 extends AbstractField { static final String SELECTED_EVENT = "selected"; static final String CANCEL_EVENT = "cancel"; /** * If true (the default), then any notification sent by the component will be deferred until the end of the form * submission (this is usually desirable). */ @Parameter private boolean _defer = true; /** * Determines the button behavior, <b>"submit"</b> - a normal form button, <b>"reset"</b> - reset form (locally), * "cancel" - works like an actionlink, generates a "cancel" event instead of "selected" and the form is not submitted * (if javascript is disabled form will be submitted, and "cancel" event fired as well), * <b>"submitcancel"</b> - works like "cancel" but behaves consistently with and without javascript * submission (this is usually desirable). */ @Parameter(defaultPrefix=TapestryConstants.LITERAL_BINDING_PREFIX) private String _type = "submit"; @Environmental private FormSupport _formSupport; @Environmental private Heartbeat _heartbeat; @Inject private ComponentResources _resources; @Inject private Request _request; @Inject @Traditional private ComponentEventResultProcessor _eventResultProcessor; @SuppressWarnings("unused") @Mixin private RenderDisabled _renderDisabled; public Submit2() { } Submit2(Request request) { _request = request; } void beginRender(MarkupWriter writer) { String inputType = _type.equalsIgnoreCase("reset") ? "reset":"submit"; writer.element("input", "type", inputType, "name", getElementName(), "id", getClientId()); //form will not be submitted (behaves like an action link) and cancel event will be generated if(_type.equalsIgnoreCase("cancel")) writer.attributes("onclick",String.format("document,location='%s';return false;", _resources.createActionLink(CANCEL_EVENT, true))); //submit the form but skip client validation if(_type.equalsIgnoreCase("submitcancel")) writer.attributes("onclick",String.format("$('%s').onsubmit=null", _formSupport.getClientId())); _resources.renderInformalParameters(writer); } void afterRender(MarkupWriter writer) { writer.end(); } @Override protected void processSubmission(String elementName) { String value = _request.getParameter(elementName); if (value == null) return; Runnable sendNotification = new Runnable() { public void run() { // cancel event link will be generated with javascript, if javascript is working this code // will not be reached for type=cancel, however if javascript is disabled we trigger the different event from here boolean isCancel = _type.equalsIgnoreCase("submitcancel") || _type.equalsIgnoreCase("cancel"); String eventType = isCancel ? CANCEL_EVENT : SELECTED_EVENT; ComponentEventCallback callback = isCancel ? new ComponentResultProcessorWrapper(_eventResultProcessor) : null; _resources.triggerEvent(eventType, null, callback); } }; // When not deferred, don't wait, fire the event now (actually, at the end of the current // heartbeat). This is most likely because the Submit is inside a Loop and some contextual // information will change if we defer. if (_defer) _formSupport.defer(sendNotification); else _heartbeat.defer(sendNotification); } // For testing: void setDefer(boolean defer) { _defer = defer; } void setType(String type) { _type = type; } void setup(ComponentResources resources, FormSupport support, Heartbeat heartbeat) { _resources = resources; _formSupport = support; _heartbeat = heartbeat; } } On Jan 31, 2008 11:51 PM, Geoff Callender <[EMAIL PROTECTED]> wrote: > I had to tweak it a bit for IE. Try this example as a starting point... > > [Save] [Password...][Refresh][Cancel] > > <div class="buttons"> > <table> > <tr> > <td><input type="submit" value="Save" class="positive"/></td> > <td><a t:type="pagelink" t:page="security/UserPasswordChange" > t:context="user.id" title="Change Password" href="#">Password...</a></ > td> > <td><a t:type="pagelink" t:page="security/UserEdit" > t:context="user.id" title="Refresh">Refresh</a></td> > <td><a t:type="actionlink" t:id="Cancel" href="#">Cancel</a></td> > </tr> > </table> > </div> > > /* > Button styling based on > http://particletree.com/features/rediscovering-the-button-element/ > */ > .buttons { float: right; } > .buttons td { text-align: center; } > .buttons a, .buttons input { font-family: Verdana, Arial, Helvetica, > sans-serif; font-weight: bold; > width: 7em; border: 2px solid #8cacbb; > display: block; } > .buttons a { padding: 4px 0; text-decoration: none; > background: > #e9f3f6; } > .buttons input { padding: 3px 10px; margin: 0; cursor: > pointer; } > .buttons input[type] { /* Safari */ line-height: 17px; } > *:first-child+html .buttons input[type] { /* IE 7 */ line-height: > 13px; } > > /* Standard */ > .buttons a, .buttons input { background-color:#d5f5f5; color:#529214; } > .buttons a:hover, .buttons input:hover > { background-color:#dff4ff; color:#336699; } > .buttons a:active { background-color:#6299c5; color:#fff; } > > /* Positive */ > .buttons a.positive, .buttons input.positive > { color:#4d798e; } > .buttons a.positive:hover, .buttons input.positive:hover > { background-color:#E6EFC2; color:#529214; } > .buttons a.positive:active { background-color:#529214; color:#fff; } > > /* Negative */ > .buttons a.negative, .buttons input.negative > { color:#d12f19; } > .buttons a.negative:hover, .buttons input.negative:hover > { background:#fbe3e4; color:#d12f19; } > .buttons a.negative:active { background-color:#d12f19; color:#fff; } > > Cheers, > > Geoff > > > On 01/02/2008, at 2:00 AM, Mark Horn wrote: > > > Geoff, or others :) > > > > I found the posting below suggesting making links/buttons/submits look > > the same as described at > > http://particletree.com/features/rediscovering-the-button-element/ > > and used by Jumpstart (http://files.doublenegative.com.au/jumpstart/) > > > > I tried this out and all looks/works great in FireFox but does not > > work correctly in IE. Any ideas on how to tweak these for IE? or any > > other Best Practice on how to support this type of thing? > > > > The original question was Best Practice for cancel an edit page. ie. > > have a Submit button that is 'Save' a link that is 'Cancel' (don't > > want validation) and want to have them together and look good. > > > > [Save] [Cancel] > > > > Thanks, > > Mark > > > > ------------------------------------- > > > > Re: [T5] best practice to cancel edit page > > from Tapestry User by jeffrey ai <[EMAIL PROTECTED]> > > > > That's great to know! > > Thanks for your tips, Geoff. > > > > Cheers, > > Jeffrey Ai > > > > > > Geoff Callender-2 wrote: > >> > >> Hi Jeffrey, > >> > >> What you do is change the submits and the links to look the same, > >> which is not quite the same as the browser-generated button, but on > >> the plus-side they'll look the same in any browser. This approach is > >> used in many commercial sites eg. banking sites. One place that > >> describes button-styling is > >> http://particletree.com/features/rediscovering-the-button-element/ > >> . > >> > >> eg. Here are 3 "buttons" on a UserEdit page: > >> > >> <div class="buttons"> > >> <input type="submit" value="Save"/> > >> Refresh > >> Cancel > >> </div> > >> > >> and here's some css to style them to look the same: > >> > >> .buttons a, .buttons input { margin:0 7px 0 0; background- > >> color:#f5f5f5; border:1px solid #dedede; border-top:1px solid #eee; > >> border-left:1px solid #eee; font-family:"Lucida Grande", Tahoma, > >> Arial, Verdana, sans-serif; font-size:100%; line-height:130%; text- > >> decoration:none; font-weight:bold; color:#565656; cursor:pointer; > >> padding:5px 10px 6px 7px; /* Links and submits */ } > >> .buttons input { width:auto; overflow:visible; padding:4px 10px 3px > >> 7px; /* IE6 */ } > >> .buttons input[type] { padding:5px 10px 5px 7px; /* Firefox */ line- > >> height:17px; /* Safari */ } > >> *:first-child+html input[type] { padding:4px 10px 3px 7px; /* IE7 > >> */ } > >> .buttons input img, .buttons a img { margin:0 3px -3px 0 !important; > >> padding:0; border:none; width:16px; height:16px; } > >> > >> A fuller example is in the code of JumpStart. > >> > >> Cheers, > >> > >> Geoff > >> http://files.doublenegative.com.au/jumpstart/ > >> > >> On 22/12/2007, at 4:40 AM, jeffrey ai wrote: > >> > >>> > >>> Geoff, > >>> > >>> I am not quite familiar with CSS. > >>> I think ActionLink or PageLink could only be rendered to an Anchor > >>> Link. > >>> I doubt CSS can change its look like to a button. > >>> > >>> Cheers, > >>> Jeffrey Ai > >>> > >>> > >>> Geoff Callender-2 wrote: > >>>> > >>>> Another technique is to use an ActionLink or PageLink for cancel > >>>> and > >>>> refresh functions. To make the submit button and ActionLink share > >>>> the > >>>> same styling use css. I think Howard recommends this approach. > >>>> > >>>> Cheers, > >>>> Geoff > >>>> > >>>> On 21/12/2007, at 4:37 AM, jeffrey ai wrote: > >>>> > >>>>> > >>>>> Homburg, > >>>>> > >>>>> I noticed the same problem too. If you have a normal cancel > >>>>> button > >>>>> in a T5 > >>>>> form as your save button, a post request will be sent back to the > >>>>> page to > >>>>> go through the validation method and even onSuccess() method. > >>>>> > >>>>> My solution to this problem is to create an ActionLinkButton > >>>>> component. It's > >>>>> almost the same with the ActionLink component, Instead of create a > >>>>> normal > >>>>> link, it creates a button link like below: > >>>>> > >>>>> <input type="button" value="cancel" > >>>>> onclick="parent.location='/xxx/YOURPAGE.cancel'" id="cancel"/> > >>>>> > >>>>> In your page, you could have an onActionFromCancel() method to do > >>>>> whatever > >>>>> redirection you want. > >>>>> > >>>>> Cheers, > >>>>> Jeffrey Ai > >>>>> > >>>>> > >>>>> > >>>>> Sven Homburg-2 wrote: > >>>>>> > >>>>>> hi there, > >>>>>> > >>>>>> who can me explain the best practice to cancel edit page? > >>>>>> > >>>>>> i have a save- and cancel button (both submit components) > >>>>>> surrounded by > >>>>>> a form component. > >>>>>> > >>>>>> if user press the cancel button, the edit form should make > >>>>>> nothing > >>>>>> than > >>>>>> leave the page. > >>>>>> without prepare, validation, etc > >>>>>> > >>>>>> is this possible? > >>>>>> > >>>>>> -- > >>>>>> best regards > >>>>>> S.Homburg > >>>>>> > >>>>>> > >>>>>> > >>>>>> --------------------------------------------------------------------- > >>>>>> To unsubscribe, e-mail: [EMAIL PROTECTED] > >>>>>> For additional commands, e-mail: [EMAIL PROTECTED] > >>>>>> > >>>>>> > >>>>>> > >>>>> > >>>>> -- > >>>>> View this message in context: > >>>>> http://www.nabble.com/-T5--best-practice-to-cancel-edit-page-tp14427892p14441353.html > >>>>> Sent from the Tapestry - User mailing list archive at Nabble.com. > >>>>> > >>>>> > >>>>> --------------------------------------------------------------------- > >>>>> To unsubscribe, e-mail: [EMAIL PROTECTED] > >>>>> For additional commands, e-mail: [EMAIL PROTECTED] > >>>>> > >>>> > >>>> > >>>> --------------------------------------------------------------------- > >>>> To unsubscribe, e-mail: [EMAIL PROTECTED] > >>>> For additional commands, e-mail: [EMAIL PROTECTED] > >>>> > >>>> > >>>> > >>> > >>> -- > >>> View this message in context: > >>> http://www.nabble.com/-T5--best-practice-to-cancel-edit-page-tp14427892p14459523.html > >>> Sent from the Tapestry - User mailing list archive at Nabble.com. > >>> > >>> > >>> --------------------------------------------------------------------- > >>> To unsubscribe, e-mail: [EMAIL PROTECTED] > >>> For additional commands, e-mail: [EMAIL PROTECTED] > >>> > >> > >> > >> > > > > -- > > View this message in context: > > http://www.nabble.com/-T5--best-practice-to-cancel-edit-page-tp14427892p14464072.html > > Sent from the Tapestry - User mailing list archive at Nabble.com. > > > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: [EMAIL PROTECTED] > > For additional commands, e-mail: [EMAIL PROTECTED] > > > > > > > > > > > > > > Add starShareEmailAdd tags > > > > > > > > > > View more items from "Tapestry User" > > > > Or go > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: [EMAIL PROTECTED] > > For additional commands, e-mail: [EMAIL PROTECTED] > > > > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]