/* Wotonomy: OpenStep design patterns for pure Java applications. Copyright (C) 2000 Blacksmith, Inc. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, see http://www.gnu.org */ package net.wotonomy.web; import net.wotonomy.foundation.NSArray; import net.wotonomy.foundation.NSDictionary; /** * Implements a FORM element with dynamic bindings. * * @author michael@mpowers.net * @author $Author: cgruber $ * @version $Revision: 905 $ */ public class WOForm extends WODynamicElement { public WOForm() { super(); } public WOForm(String n, NSDictionary m, WOElement t) { super(n, m, t); } public String href(WOContext c) { return (String) valueForProperty("href", c.component()); } public String directActionName(WOContext c) { return (String) valueForProperty("directAction", c.component()); } public String directActionClass(WOContext c) { return (String) valueForProperty("actionClass", c.component()); } public boolean multipleSubmit(WOContext c) { return booleanForProperty("multipleSubmit", c.component()); } public void takeValuesFromRequest(WORequest aRequest, WOContext aContext) { if (rootElement != null) { rootElement.takeValuesFromRequest(aRequest, aContext); } } public void appendToResponse(WOResponse r, WOContext c) { // Append the opening tag r.appendContentString(" 0) r.appendContentString(link); r.appendContentString(">"); // Notify that we're inside a form now c.setInForm(true); // Append the inner template rootElement.appendToResponse(r, c); // Close the tag r.appendContentString(""); // c.deleteLastElementIDComponent(); c.setInForm(false); } public WOActionResults invokeAction(WORequest r, WOContext c) { // We only process the request if it's not a multipleSubmit (otherwise we leave // it to the buttons) if (!multipleSubmit(c) && c.elementID().equals(c.senderID()) && associations.objectForKey("action") != null) { return (WOActionResults) valueForProperty("action", c.component()); } WOActionResults res = rootElement.invokeAction(r, c); return res; } }