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
24 public class Param implements TagPlugin {
25
26 public void doTag(TagPluginContext ctxt) {
27
28
29
30
31 String nameName = ctxt.getTemporaryVariableName();
32 String valueName = ctxt.getTemporaryVariableName();
33 String urlName = ctxt.getTemporaryVariableName();
34 String encName = ctxt.getTemporaryVariableName();
35 String index = ctxt.getTemporaryVariableName();
36
37
38 TagPluginContext parent = ctxt.getParentContext();
39 if (parent == null) {
40 ctxt.generateJavaSource(" throw new JspTagExcption" +
41 "(\"<param> outside <import> or <urlEncode>\");");
42 return;
43 }
44
45
46 ctxt.generateJavaSource("String " + urlName + " = " +
47 "(String)pageContext.getAttribute(\"url_without_param\");");
48
49
50 ctxt.generateJavaSource("String " + nameName + " = ");
51 ctxt.generateAttribute("name");
52 ctxt.generateJavaSource(";");
53
54
55
56
57 ctxt.generateJavaSource("if(" + nameName + " != null && !" + nameName + ".equals(\"\")){");
58 ctxt.generateJavaSource(" String " + valueName + " = ");
59 ctxt.generateAttribute("value");
60 ctxt.generateJavaSource(";");
61 ctxt.generateJavaSource(" if(" + valueName + " == null) " + valueName + " = \"\";");
62 ctxt.generateJavaSource(" String " + encName + " = pageContext.getResponse().getCharacterEncoding();");
63 ctxt.generateJavaSource(" " + nameName + " = java.net.URLEncoder.encode(" + nameName + ", " + encName + ");");
64 ctxt.generateJavaSource(" " + valueName + " = java.net.URLEncoder.encode(" + valueName + ", " + encName + ");");
65 ctxt.generateJavaSource(" int " + index + ";");
66 ctxt.generateJavaSource(" " + index + " = " + urlName + ".indexOf(\'?\');");
67
68
69 ctxt.generateJavaSource(" if(" + index + " == -1){");
70 ctxt.generateJavaSource(" " + urlName + " = " + urlName + " + \"?\" + " + nameName + " + \"=\" + " + valueName + ";");
71 ctxt.generateJavaSource(" }else{");
72 ctxt.generateJavaSource(" " + urlName + " = " + urlName + " + \"&\" + " + nameName + " + \"=\" + " + valueName + ";");
73 ctxt.generateJavaSource(" }");
74 ctxt.generateJavaSource(" pageContext.setAttribute(\"url_without_param\"," + urlName + ");");
75 ctxt.generateJavaSource("}");
76 }
77 }