KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > jasper > tagplugins > jstl > core > Url


1 /*
2  * Licensed to the Apache Software Foundation (ASF) under one or more
3  * contributor license agreements. See the NOTICE file distributed with
4  * this work for additional information regarding copyright ownership.
5  * The ASF licenses this file to You under the Apache License, Version 2.0
6  * (the "License"); you may not use this file except in compliance with
7  * the License. You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */

17
18
19 package org.apache.jasper.tagplugins.jstl.core;
20
21 import org.apache.jasper.compiler.tagplugin.TagPlugin;
22 import org.apache.jasper.compiler.tagplugin.TagPluginContext;
23 import org.apache.jasper.tagplugins.jstl.Util;
24
25 public class Url implements TagPlugin {
26     
27     public void doTag(TagPluginContext ctxt) {
28         
29         //flags
30
boolean hasVar, hasContext, hasScope;
31         
32         //init flags
33
hasVar = ctxt.isAttributeSpecified("var");
34         hasContext = ctxt.isAttributeSpecified("context");
35         hasScope = ctxt.isAttributeSpecified("scope");
36         
37         //define name of the temp variables
38
String JavaDoc valueName = ctxt.getTemporaryVariableName();
39         String JavaDoc contextName = ctxt.getTemporaryVariableName();
40         String JavaDoc baseUrlName = ctxt.getTemporaryVariableName();
41         String JavaDoc resultName = ctxt.getTemporaryVariableName();
42         String JavaDoc responseName = ctxt.getTemporaryVariableName();
43         
44         //get the scope
45
String JavaDoc strScope = "page";
46         if(hasScope){
47             strScope = ctxt.getConstantAttribute("scope");
48         }
49         int iScope = Util.getScope(strScope);
50         
51         //get the value
52
ctxt.generateJavaSource("String " + valueName + " = ");
53         ctxt.generateAttribute("value");
54         ctxt.generateJavaSource(";");
55         
56         //get the context
57
ctxt.generateJavaSource("String " + contextName + " = null;");
58         if(hasContext){
59             ctxt.generateJavaSource(contextName + " = ");
60             ctxt.generateAttribute("context");
61             ctxt.generateJavaSource(";");
62         }
63         
64         //get the raw url
65
ctxt.generateJavaSource("String " + baseUrlName + " = " +
66                 "org.apache.jasper.tagplugins.jstl.Util.resolveUrl(" + valueName + ", " + contextName + ", pageContext);");
67         ctxt.generateJavaSource("pageContext.setAttribute" +
68                 "(\"url_without_param\", " + baseUrlName + ");");
69         
70         //add params
71
ctxt.generateBody();
72         
73         ctxt.generateJavaSource("String " + resultName + " = " +
74         "(String)pageContext.getAttribute(\"url_without_param\");");
75         ctxt.generateJavaSource("pageContext.removeAttribute(\"url_without_param\");");
76         
77         //if the url is relative, encode it
78
ctxt.generateJavaSource("if(!org.apache.jasper.tagplugins.jstl.Util.isAbsoluteUrl(" + resultName + ")){");
79         ctxt.generateJavaSource(" HttpServletResponse " + responseName + " = " +
80         "((HttpServletResponse) pageContext.getResponse());");
81         ctxt.generateJavaSource(" " + resultName + " = "
82                 + responseName + ".encodeURL(" + resultName + ");");
83         ctxt.generateJavaSource("}");
84         
85         //if "var" is specified, the url string store in the attribute var defines
86
if(hasVar){
87             String JavaDoc strVar = ctxt.getConstantAttribute("var");
88             ctxt.generateJavaSource("pageContext.setAttribute" +
89                     "(\"" + strVar + "\", " + resultName + ", " + iScope + ");");
90             
91             //if var is not specified, just print out the url string
92
}else{
93             ctxt.generateJavaSource("try{");
94             ctxt.generateJavaSource(" pageContext.getOut().print(" + resultName + ");");
95             ctxt.generateJavaSource("}catch(java.io.IOException ex){");
96             ctxt.generateJavaSource(" throw new JspTagException(ex.toString(), ex);");
97             ctxt.generateJavaSource("}");
98         }
99     }
100     
101 }
102
Popular Tags