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 Catch implements TagPlugin {
25
26 public void doTag(TagPluginContext ctxt) {
27
28
29 boolean hasVar = ctxt.isAttributeSpecified("var");
30
31
32 String exceptionName = ctxt.getTemporaryVariableName();
33 String caughtName = ctxt.getTemporaryVariableName();
34
35
36 ctxt.generateJavaSource("boolean " + caughtName + " = false;");
37 ctxt.generateJavaSource("try{");
38 ctxt.generateBody();
39 ctxt.generateJavaSource("}");
40
41
42 ctxt.generateJavaSource("catch(Throwable " + exceptionName + "){");
43
44
45
46 if (hasVar) {
47 String strVar = ctxt.getConstantAttribute("var");
48 ctxt.generateJavaSource(" pageContext.setAttribute(\"" + strVar + "\", "
49 + exceptionName + ", PageContext.PAGE_SCOPE);");
50 }
51
52
53
54 ctxt.generateJavaSource(" " + caughtName + " = true;");
55 ctxt.generateJavaSource("}");
56
57
58 ctxt.generateJavaSource("finally{");
59
60
61
62 if (hasVar) {
63 String strVar = ctxt.getConstantAttribute("var");
64 ctxt.generateJavaSource(" if(!" + caughtName + "){");
65 ctxt.generateJavaSource(" pageContext.removeAttribute(\"" + strVar + "\", PageContext.PAGE_SCOPE);");
66 ctxt.generateJavaSource(" }");
67 }
68
69 ctxt.generateJavaSource("}");
70 }
71
72 }