|
|||||||||||||||||||
30 day Evaluation License registered to hlship@comcast.net Your 30 day evaluation period has expired. Please visit http://www.cenqua.com to obtain a licensed version of Clover | |||||||||||||||||||
Source file | Conditionals | Statements | Methods | TOTAL | |||||||||||||||
LinkSubmit.java | 0% | 0% | 0% | 0% |
|
1 | // Copyright 2004, 2005 The Apache Software Foundation | |
2 | // | |
3 | // Licensed under the Apache License, Version 2.0 (the "License"); | |
4 | // you may not use this file except in compliance with the License. | |
5 | // You may obtain a copy of the License at | |
6 | // | |
7 | // http://www.apache.org/licenses/LICENSE-2.0 | |
8 | // | |
9 | // Unless required by applicable law or agreed to in writing, software | |
10 | // distributed under the License is distributed on an "AS IS" BASIS, | |
11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
12 | // See the License for the specific language governing permissions and | |
13 | // limitations under the License. | |
14 | ||
15 | package org.apache.tapestry.form; | |
16 | ||
17 | import org.apache.hivemind.ApplicationRuntimeException; | |
18 | import org.apache.tapestry.IForm; | |
19 | import org.apache.tapestry.IMarkupWriter; | |
20 | import org.apache.tapestry.IRequestCycle; | |
21 | import org.apache.tapestry.PageRenderSupport; | |
22 | import org.apache.tapestry.Tapestry; | |
23 | import org.apache.tapestry.TapestryUtils; | |
24 | ||
25 | /** | |
26 | * Implements a component that submits its enclosing form via a JavaScript link. [ <a | |
27 | * href="../../../../../ComponentReference/LinkSubmit.html">Component Reference </a>] | |
28 | * | |
29 | * @author Richard Lewis-Shell | |
30 | */ | |
31 | ||
32 | public abstract class LinkSubmit extends AbstractSubmit | |
33 | { | |
34 | /** | |
35 | * The name of an {@link org.apache.tapestry.IRequestCycle}attribute in which the current | |
36 | * submit link is stored. LinkSubmits do not nest. | |
37 | */ | |
38 | ||
39 | public static final String ATTRIBUTE_NAME = "org.apache.tapestry.form.LinkSubmit"; | |
40 | ||
41 | /** | |
42 | * The name of an {@link org.apache.tapestry.IRequestCycle}attribute in which the link submit | |
43 | * component that generates the javascript function is stored. The function is only required | |
44 | * once per page (containing a form with a non-disabled LinkSubmit) | |
45 | */ | |
46 | public static final String ATTRIBUTE_FUNCTION_NAME = "org.apache.tapestry.form.LinkSubmit_function"; | |
47 | ||
48 | 0 | protected boolean isClicked(IRequestCycle cycle, String name) |
49 | { | |
50 | // How to know which Submit link was actually | |
51 | // clicked? When submitted, it sets its elementId into a hidden field | |
52 | 0 | String value = cycle.getParameter("_linkSubmit"); |
53 | ||
54 | // If the value isn't the elementId of this component, then this link wasn't | |
55 | // selected. | |
56 | 0 | return value != null && value.equals(name); |
57 | } | |
58 | ||
59 | /** | |
60 | * @see org.apache.tapestry.form.AbstractFormComponent#renderFormComponent(org.apache.tapestry.IMarkupWriter, org.apache.tapestry.IRequestCycle) | |
61 | */ | |
62 | 0 | protected void renderFormComponent(IMarkupWriter writer, IRequestCycle cycle) |
63 | { | |
64 | 0 | boolean disabled = isDisabled(); |
65 | ||
66 | 0 | IMarkupWriter wrappedWriter; |
67 | ||
68 | 0 | if (!disabled) |
69 | { | |
70 | 0 | PageRenderSupport pageRenderSupport = TapestryUtils.getPageRenderSupport( |
71 | cycle, | |
72 | this); | |
73 | ||
74 | // make sure the submit function is on the page (once) | |
75 | 0 | if (cycle.getAttribute(ATTRIBUTE_FUNCTION_NAME) == null) |
76 | { | |
77 | 0 | pageRenderSupport |
78 | .addBodyScript("function submitLink(form, elementId) { form._linkSubmit.value = elementId; if (form.onsubmit == null || form.onsubmit()) form.submit(); }"); | |
79 | 0 | cycle.setAttribute(ATTRIBUTE_FUNCTION_NAME, this); |
80 | } | |
81 | ||
82 | 0 | IForm form = getForm(); |
83 | 0 | String formName = form.getName(); |
84 | ||
85 | // one hidden field per form: | |
86 | 0 | String formHiddenFieldAttributeName = ATTRIBUTE_FUNCTION_NAME + formName; |
87 | 0 | if (cycle.getAttribute(formHiddenFieldAttributeName) == null) |
88 | { | |
89 | 0 | writer.beginEmpty("input"); |
90 | 0 | writer.attribute("type", "hidden"); |
91 | 0 | writer.attribute("name", "_linkSubmit"); |
92 | 0 | cycle.setAttribute(formHiddenFieldAttributeName, this); |
93 | } | |
94 | ||
95 | 0 | writer.begin("a"); |
96 | 0 | writer.attribute("href", "javascript:submitLink(document." + formName + ",\"" + getName() |
97 | + "\");"); | |
98 | ||
99 | // Allow the wrapped components a chance to render. | |
100 | // Along the way, they may interact with this component | |
101 | // and cause the name variable to get set. | |
102 | 0 | wrappedWriter = writer.getNestedWriter(); |
103 | } | |
104 | else | |
105 | 0 | wrappedWriter = writer; |
106 | ||
107 | 0 | renderBody(wrappedWriter, cycle); |
108 | ||
109 | 0 | if (!disabled) |
110 | { | |
111 | // Generate additional attributes from informal parameters. | |
112 | 0 | renderInformalParameters(writer, cycle); |
113 | ||
114 | // Dump in HTML provided by wrapped components | |
115 | 0 | wrappedWriter.close(); |
116 | ||
117 | // Close the <a> tag | |
118 | 0 | writer.end(); |
119 | } | |
120 | } | |
121 | ||
122 | /** | |
123 | * @see org.apache.tapestry.AbstractComponent#prepareForRender(org.apache.tapestry.IRequestCycle) | |
124 | */ | |
125 | 0 | protected void prepareForRender(IRequestCycle cycle) |
126 | { | |
127 | 0 | if (cycle.getAttribute(ATTRIBUTE_NAME) != null) |
128 | 0 | throw new ApplicationRuntimeException(Tapestry.getMessage("LinkSubmit.may-not-nest"), |
129 | this, null, null); | |
130 | ||
131 | 0 | cycle.setAttribute(ATTRIBUTE_NAME, this); |
132 | } | |
133 | ||
134 | /** | |
135 | * @see org.apache.tapestry.AbstractComponent#cleanupAfterRender(org.apache.tapestry.IRequestCycle) | |
136 | */ | |
137 | 0 | protected void cleanupAfterRender(IRequestCycle cycle) |
138 | { | |
139 | 0 | cycle.removeAttribute(ATTRIBUTE_NAME); |
140 | } | |
141 | } |
|