1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
|
/*
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("<FORM");
String link = href(c);
//Append the href, if present
if (link != null) {
r.appendContentString(" HREF=\"");
r.appendContentString(link);
r.appendContentString("\"");
link = null;
} else {
link = directActionName(c);
}
//otherwise, append Direct Action
if (link != null) {
r.appendContentString(" HREF=\"");
if (directActionClass(c) != null)
link = directActionClass(c) + "/" + link;
r.appendContentString(c.directActionURLForActionNamed(link, urlFields(c.component())));
r.appendContentString("\"");
link = null;
// } else if (associations.objectForKey("action") != null) {
} else {
//finally, append action
r.appendContentString(" action=\"");
r.appendContentString(c.componentActionURL());
r.appendContentString("\"");
} //else
// now defaulting to action if not specified(?): WOBuilder does generate WOForms without any bindings(!)
// throw new IllegalArgumentException("You must use one of directActionName, action, or href.");
//Append any additional properties
link = additionalHTMLProperties(c.component(), new NSArray(new Object[]{
"href", "action", "directActionName", "actionClass", "multipleSubmit" }));
if (link.length() > 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("</FORM>");
// 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;
}
}
|