001: /*
002: * $Id: FormButton.java 497654 2007-01-19 00:21:57Z rgielen $
003: *
004: * Licensed to the Apache Software Foundation (ASF) under one
005: * or more contributor license agreements. See the NOTICE file
006: * distributed with this work for additional information
007: * regarding copyright ownership. The ASF licenses this file
008: * to you under the Apache License, Version 2.0 (the
009: * "License"); you may not use this file except in compliance
010: * with the License. You may obtain a copy of the License at
011: *
012: * http://www.apache.org/licenses/LICENSE-2.0
013: *
014: * Unless required by applicable law or agreed to in writing,
015: * software distributed under the License is distributed on an
016: * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
017: * KIND, either express or implied. See the License for the
018: * specific language governing permissions and limitations
019: * under the License.
020: */
021: package org.apache.struts2.components;
022:
023: import javax.servlet.http.HttpServletRequest;
024: import javax.servlet.http.HttpServletResponse;
025:
026: import org.apache.struts2.views.annotations.StrutsTagAttribute;
027:
028: import com.opensymphony.xwork2.util.ValueStack;
029:
030: /**
031: * FormButton.
032: */
033: public abstract class FormButton extends UIBean {
034:
035: static final String BUTTONTYPE_INPUT = "input";
036: static final String BUTTONTYPE_BUTTON = "button";
037: static final String BUTTONTYPE_IMAGE = "image";
038:
039: protected String action;
040: protected String method;
041: protected String align;
042: protected String type;
043:
044: public FormButton(ValueStack stack, HttpServletRequest request,
045: HttpServletResponse response) {
046: super (stack, request, response);
047: }
048:
049: //public void evaluateParams() {
050: public void evaluateExtraParams() {
051: super .evaluateExtraParams();
052: if (align == null) {
053: align = "right";
054: }
055:
056: String submitType = BUTTONTYPE_INPUT;
057: if (type != null
058: && (BUTTONTYPE_BUTTON.equalsIgnoreCase(type) || (supportsImageType() && BUTTONTYPE_IMAGE
059: .equalsIgnoreCase(type)))) {
060: submitType = type;
061: }
062:
063: //super.evaluateParams();
064:
065: addParameter("type", submitType);
066:
067: if (!BUTTONTYPE_INPUT.equals(submitType) && (label == null)) {
068: addParameter("label", getParameters().get("nameValue"));
069: }
070:
071: if (action != null || method != null) {
072: String name;
073:
074: if (action != null) {
075: name = "action:" + findString(action);
076:
077: if (method != null) {
078: name += "!" + findString(method);
079: }
080: } else {
081: name = "method:" + findString(method);
082: }
083:
084: addParameter("name", name);
085: }
086:
087: addParameter("align", findString(align));
088:
089: }
090:
091: /**
092: * Override UIBean's implementation, such that component Html id is determined
093: * in the following order :-
094: * <ol>
095: * <li>This component id attribute</li>
096: * <li>[containing_form_id]_[this_component_name]</li>
097: * <li>[containing_form_id]_[this_component_action]_[this_component_method]</li>
098: * <li>[containing_form_id]_[this_component_method]</li>
099: * <li>[this_component_name]</li>
100: * <li>[this_component_action]_[this_component_method]</li>
101: * <li>[this_component_method]</li>
102: * <li>[an increasing sequential number unique to the form starting with 0]</li>
103: * </ol>
104: */
105: protected void populateComponentHtmlId(Form form) {
106: String _tmp_id = "";
107: if (id != null) {
108: // this check is needed for backwards compatibility with 2.1.x
109: if (altSyntax()) {
110: _tmp_id = findString(id);
111: } else {
112: _tmp_id = id;
113: }
114: } else {
115: if (form != null && form.getParameters().get("id") != null) {
116: _tmp_id = _tmp_id
117: + form.getParameters().get("id").toString()
118: + "_";
119: }
120: if (name != null) {
121: _tmp_id = _tmp_id + escape(name);
122: } else if (action != null || method != null) {
123: if (action != null) {
124: _tmp_id = _tmp_id + escape(action);
125: }
126: if (method != null) {
127: _tmp_id = _tmp_id + "_" + escape(method);
128: }
129: } else {
130: // if form is null, this component is used, without a form, i guess
131: // there's not much we could do then.
132: if (form != null) {
133: _tmp_id = _tmp_id + form.getSequence();
134: }
135: }
136: }
137: addParameter("id", _tmp_id);
138: }
139:
140: /**
141: * Indicate whether the concrete button supports the type "image".
142: *
143: * @return <tt>true</tt> if type image is supported.
144: */
145: protected abstract boolean supportsImageType();
146:
147: @StrutsTagAttribute(description="Set action attribute.")
148: public void setAction(String action) {
149: this .action = action;
150: }
151:
152: @StrutsTagAttribute(description="Set method attribute.")
153: public void setMethod(String method) {
154: this .method = method;
155: }
156:
157: @StrutsTagAttribute(description="HTML align attribute.")
158: public void setAlign(String align) {
159: this .align = align;
160: }
161:
162: @StrutsTagAttribute(description="The type of submit to use. Valid values are input, " + "button and image.",defaultValue="input")
163: public void setType(String type) {
164: this.type = type;
165: }
166: }
|