1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.struts2.jasper.tagplugins.jstl.core;
20
21 import org.apache.struts2.jasper.compiler.tagplugin.TagPlugin;
22 import org.apache.struts2.jasper.compiler.tagplugin.TagPluginContext;
23 import org.apache.struts2.jasper.tagplugins.jstl.Util;
24
25 public class Url implements TagPlugin {
26
27 public void doTag(TagPluginContext ctxt) {
28
29
30 boolean hasVar, hasContext, hasScope;
31
32
33 hasVar = ctxt.isAttributeSpecified("var");
34 hasContext = ctxt.isAttributeSpecified("context");
35 hasScope = ctxt.isAttributeSpecified("scope");
36
37
38 String valueName = ctxt.getTemporaryVariableName();
39 String contextName = ctxt.getTemporaryVariableName();
40 String baseUrlName = ctxt.getTemporaryVariableName();
41 String resultName = ctxt.getTemporaryVariableName();
42 String responseName = ctxt.getTemporaryVariableName();
43
44
45 String strScope = "page";
46 if (hasScope) {
47 strScope = ctxt.getConstantAttribute("scope");
48 }
49 int iScope = Util.getScope(strScope);
50
51
52 ctxt.generateJavaSource("String " + valueName + " = ");
53 ctxt.generateAttribute("value");
54 ctxt.generateJavaSource(";");
55
56
57 ctxt.generateJavaSource("String " + contextName + " = null;");
58 if (hasContext) {
59 ctxt.generateJavaSource(contextName + " = ");
60 ctxt.generateAttribute("context");
61 ctxt.generateJavaSource(";");
62 }
63
64
65 ctxt.generateJavaSource("String " + baseUrlName + " = " +
66 "org.apache.struts2.jasper.tagplugins.jstl.Util.resolveUrl(" + valueName + ", " + contextName + ", pageContext);");
67 ctxt.generateJavaSource("pageContext.setAttribute" +
68 "(\"url_without_param\", " + baseUrlName + ");");
69
70
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
78 ctxt.generateJavaSource("if(!org.apache.struts2.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
86 if (hasVar) {
87 String strVar = ctxt.getConstantAttribute("var");
88 ctxt.generateJavaSource("pageContext.setAttribute" +
89 "(\"" + strVar + "\", " + resultName + ", " + iScope + ");");
90
91
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 }