KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > jcorporate > expresso > services > taglib > SelectOptions


1 package com.jcorporate.expresso.services.taglib;
2
3 /* ====================================================================
4  * The Jcorporate Apache Style Software License, Version 1.2 05-07-2002
5  *
6  * Copyright (c) 1995-2003 Jcorporate Ltd. All rights reserved.
7  *
8  * Redistribution and use in source and binary forms, with or without
9  * modification, are permitted provided that the following conditions
10  * are met:
11  *
12  * 1. Redistributions of source code must retain the above copyright
13  * notice, this list of conditions and the following disclaimer.
14  *
15  * 2. Redistributions in binary form must reproduce the above copyright
16  * notice, this list of conditions and the following disclaimer in
17  * the documentation and/or other materials provided with the
18  * distribution.
19  *
20  * 3. The end-user documentation included with the redistribution,
21  * if any, must include the following acknowledgment:
22  * "This product includes software developed by Jcorporate Ltd.
23  * (http://www.jcorporate.com/)."
24  * Alternately, this acknowledgment may appear in the software itself,
25  * if and wherever such third-party acknowledgments normally appear.
26  *
27  * 4. "Jcorporate" and product names such as "Expresso" must
28  * not be used to endorse or promote products derived from this
29  * software without prior written permission. For written permission,
30  * please contact info@jcorporate.com.
31  *
32  * 5. Products derived from this software may not be called "Expresso",
33  * or other Jcorporate product names; nor may "Expresso" or other
34  * Jcorporate product names appear in their name, without prior
35  * written permission of Jcorporate Ltd.
36  *
37  * 6. No product derived from this software may compete in the same
38  * market space, i.e. framework, without prior written permission
39  * of Jcorporate Ltd. For written permission, please contact
40  * partners@jcorporate.com.
41  *
42  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
43  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
44  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
45  * DISCLAIMED. IN NO EVENT SHALL JCORPORATE LTD OR ITS CONTRIBUTORS
46  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
47  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
48  * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
49  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
50  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
51  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
52  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
53  * SUCH DAMAGE.
54  * ====================================================================
55  *
56  * This software consists of voluntary contributions made by many
57  * individuals on behalf of the Jcorporate Ltd. Contributions back
58  * to the project(s) are encouraged when you make modifications.
59  * Please send them to support@jcorporate.com. For more information
60  * on Jcorporate Ltd. and its products, please see
61  * <http://www.jcorporate.com/>.
62  *
63  * Portions of this software are based upon other open source
64  * products and are subject to their respective licenses.
65  */

66
67 import com.jcorporate.expresso.core.controller.Input;
68 import com.jcorporate.expresso.core.dbobj.ValidValue;
69 import com.jcorporate.expresso.kernel.util.FastStringBuffer;
70 import org.apache.log4j.Logger;
71
72 import javax.servlet.jsp.JspException JavaDoc;
73 import javax.servlet.jsp.tagext.TagSupport JavaDoc;
74 import java.io.IOException JavaDoc;
75 import java.util.Iterator JavaDoc;
76 import java.util.List JavaDoc;
77 import java.util.Vector JavaDoc;
78
79 /**
80  * SelectOptions tag goes inside a &lt;select&gt; tag. It outputs all the
81  * &lt;option&gt; values as specified by an Input's ValidValues, and provides
82  * the the default selected value based upon the 'defaultValue' of the Input.
83  * <p>Set parameter 'value' to a JSTL expression that evaluates to an Input</p>
84  *
85  * @author Michael Rimov
86  * @version $Revision: 1.8 $ on $Date: 2004/11/17 20:48:21 $
87  */

88 public class SelectOptions extends TagSupport JavaDoc {
89     public SelectOptions() {
90     }
91
92     private static final Logger log = Logger.getLogger(SelectOptions.class);
93
94     /**
95      * JSTL EL expression
96      */

97     private String JavaDoc value;
98
99     /**
100      * Get the JSTL expression for value.
101      *
102      * @return java.lang.String
103      */

104     public String JavaDoc getValue() {
105         return value;
106     }
107
108     /**
109      * Sets the value JSTL expression
110      *
111      * @param value the JSTL expression value
112      */

113     public void setValue(String JavaDoc value) {
114         this.value = value;
115     }
116
117     /**
118      * Does the actual grunt work.
119      *
120      * @return EVAL_PAGE
121      */

122     public int doEndTag() throws javax.servlet.jsp.JspException JavaDoc {
123         ELTagSupport support = ELTagSupport.getInstance();
124         Input result = (Input) support.evaluate("value", this.getValue(),
125                 Input.class,
126                 this, this.pageContext);
127
128         if (result == null) {
129             throw new JspException JavaDoc("Unable to find Input with expression: " + this.getValue());
130         }
131
132         String JavaDoc writeValue;
133         FastStringBuffer fsb = FastStringBuffer.getInstance();
134         List JavaDoc defaultValues = result.getDefaultValueList();
135
136         try {
137             Vector JavaDoc vec = result.getValidValues();
138             if (vec != null) {
139                 int size = vec.size();
140                 for (int i = 0; i < size; i++) {
141                     ValidValue vv = (ValidValue) vec.get(i);
142                     boolean selected = false;
143                     String JavaDoc value = vv.getValue();
144                     for (Iterator JavaDoc iterator = defaultValues.iterator(); iterator.hasNext();) {
145                         String JavaDoc def = (String JavaDoc) iterator.next();
146                         if (value.equals(def)) {
147                             selected = true;
148                             break;
149                         }
150                     }
151
152
153                     fsb.append("<option value=\"");
154                     fsb.append(vv.getValue());
155                     fsb.append("\"");
156                     if (selected) {
157                         fsb.append(" selected ");
158                     }
159                     fsb.append(">");
160                     fsb.append(vv.getDescription());
161                     fsb.append("</option>\n");
162                 }
163             } else {
164                 // give warning
165
System.err.println("Cannot find valid values for input: " + this.getValue());
166             }
167         } finally {
168             writeValue = fsb.toString();
169             fsb.release();
170         }
171
172         try {
173             pageContext.getOut().write(writeValue);
174         } catch (IOException JavaDoc ex1) {
175             log.error("I/O exception writing output value", ex1);
176         }
177
178         return EVAL_PAGE;
179     }
180
181 }
Popular Tags