1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 package org.apache.struts2.components;
23
24 import javax.servlet.http.HttpServletRequest;
25 import javax.servlet.http.HttpServletResponse;
26
27 import org.apache.struts2.views.annotations.StrutsTagAttribute;
28 import org.apache.struts2.dispatcher.mapper.ActionMapper;
29 import org.apache.struts2.dispatcher.mapper.ActionMapping;
30
31 import com.opensymphony.xwork2.util.ValueStack;
32 import com.opensymphony.xwork2.inject.Inject;
33
34 /***
35 * FormButton.
36 */
37 public abstract class FormButton extends ClosingUIBean {
38
39 static final String BUTTONTYPE_INPUT = "input";
40 static final String BUTTONTYPE_BUTTON = "button";
41 static final String BUTTONTYPE_IMAGE = "image";
42
43 protected String action;
44 protected String method;
45 protected String align;
46 protected String type;
47
48 public FormButton(ValueStack stack, HttpServletRequest request, HttpServletResponse response) {
49 super(stack, request, response);
50 }
51
52
53 public void evaluateExtraParams() {
54 super.evaluateExtraParams();
55 if (align == null) {
56 align = "right";
57 }
58
59 String submitType = BUTTONTYPE_INPUT;
60 if (type != null && (BUTTONTYPE_BUTTON.equalsIgnoreCase(type) || (supportsImageType() && BUTTONTYPE_IMAGE.equalsIgnoreCase(type))))
61 {
62 submitType = type;
63 }
64
65
66
67 addParameter("type", submitType);
68
69 if (!BUTTONTYPE_INPUT.equals(submitType) && (label == null)) {
70 addParameter("label", getParameters().get("nameValue"));
71 }
72
73 if (action != null || method != null) {
74 String name;
75
76 if (action != null) {
77 ActionMapping mapping = new ActionMapping();
78 mapping.setName(findString(action));
79 if (method != null) {
80 mapping.setMethod(findString(method));
81 }
82 mapping.setExtension("");
83 name = "action:" + actionMapper.getUriFromActionMapping(mapping);
84 } else {
85 name = "method:" + findString(method);
86 }
87
88 addParameter("name", name);
89 }
90
91 addParameter("align", findString(align));
92
93 }
94
95 /***
96 * Override UIBean's implementation, such that component Html id is determined
97 * in the following order :-
98 * <ol>
99 * <li>This component id attribute</li>
100 * <li>[containing_form_id]_[this_component_name]</li>
101 * <li>[containing_form_id]_[this_component_action]_[this_component_method]</li>
102 * <li>[containing_form_id]_[this_component_method]</li>
103 * <li>[this_component_name]</li>
104 * <li>[this_component_action]_[this_component_method]</li>
105 * <li>[this_component_method]</li>
106 * <li>[an increasing sequential number unique to the form starting with 0]</li>
107 * </ol>
108 */
109 protected void populateComponentHtmlId(Form form) {
110 String _tmp_id = "";
111 if (id != null) {
112
113 _tmp_id = findStringIfAltSyntax(id);
114 }
115 else {
116 if (form != null && form.getParameters().get("id") != null) {
117 _tmp_id = _tmp_id + form.getParameters().get("id").toString() + "_";
118 }
119 if (name != null) {
120 _tmp_id = _tmp_id + escape(name);
121 } else if (action != null || method != null){
122 if (action != null) {
123 _tmp_id = _tmp_id + escape(action);
124 }
125 if (method != null) {
126 _tmp_id = _tmp_id + "_" + escape(method);
127 }
128 } else {
129
130
131 if (form != null) {
132 _tmp_id = _tmp_id + form.getSequence();
133 }
134 }
135 }
136 addParameter("id", _tmp_id);
137 }
138
139 /***
140 * Indicate whether the concrete button supports the type "image".
141 *
142 * @return <tt>true</tt> if type image is supported.
143 */
144 protected abstract boolean supportsImageType();
145
146 @Inject
147 public void setActionMapper(ActionMapper mapper) {
148 this.actionMapper = mapper;
149 }
150
151 @StrutsTagAttribute(description="Set action attribute.")
152 public void setAction(String action) {
153 this.action = action;
154 }
155
156 @StrutsTagAttribute(description="Set method attribute.")
157 public void setMethod(String method) {
158 this.method = method;
159 }
160
161 @StrutsTagAttribute(description="HTML align attribute.")
162 public void setAlign(String align) {
163 this.align = align;
164 }
165
166 @StrutsTagAttribute(description="The type of submit to use. Valid values are <i>input</i>, " +
167 "<i>button</i> and <i>image</i>.", defaultValue="input")
168 public void setType(String type) {
169 this.type = type;
170 }
171 }