1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.myfaces.webapp;
20
21 import java.util.Iterator;
22 import java.util.logging.Level;
23 import java.util.logging.Logger;
24
25 import javax.el.ExpressionFactory;
26 import javax.faces.FactoryFinder;
27 import javax.faces.context.ExternalContext;
28 import javax.faces.event.PhaseListener;
29 import javax.faces.lifecycle.LifecycleFactory;
30 import javax.servlet.ServletContext;
31 import javax.servlet.jsp.JspApplicationContext;
32 import javax.servlet.jsp.JspFactory;
33
34 import org.apache.myfaces.config.RuntimeConfig;
35 import org.apache.myfaces.el.ResolverForJSPInitializer;
36 import org.apache.myfaces.el.unified.ELResolverBuilder;
37 import org.apache.myfaces.el.unified.ResolverBuilderForJSP;
38 import org.apache.myfaces.el.unified.resolver.FacesCompositeELResolver;
39 import org.apache.myfaces.el.unified.resolver.FacesCompositeELResolver.Scope;
40
41
42
43
44
45 public class Jsp21FacesInitializer extends AbstractFacesInitializer
46 {
47
48
49
50
51 private static final Logger log = Logger.getLogger(Jsp21FacesInitializer.class.getName());
52
53
54
55
56 private JspFactory jspFactory;
57
58 @Override
59 protected void initContainerIntegration(
60 ServletContext servletContext, ExternalContext externalContext)
61 {
62 JspApplicationContext appCtx =
63 getJspFactory().getJspApplicationContext(servletContext);
64 appCtx.addELContextListener(new FacesELContextListener());
65
66
67 ExpressionFactory expressionFactory = getUserDefinedExpressionFactory(externalContext);
68 if (expressionFactory == null)
69 {
70 expressionFactory = appCtx.getExpressionFactory();
71 }
72
73 RuntimeConfig runtimeConfig =
74 buildConfiguration(servletContext, externalContext, expressionFactory);
75
76
77 configureResolverForJSP(appCtx, runtimeConfig);
78 }
79
80 protected JspFactory getJspFactory()
81 {
82 if (jspFactory == null) {
83
84
85 try {
86 Class.forName("org.apache.jasper.compiler.JspRuntimeContext");
87 } catch (ClassNotFoundException e) {
88 ;
89 } catch (Exception ex) {
90 log.log(Level.FINE, "An unexpected exception occured "
91 + "while loading the JspRuntimeContext.", ex);
92 }
93
94 jspFactory = JspFactory.getDefaultFactory();
95 }
96
97 return jspFactory;
98 }
99
100
101
102
103
104
105
106
107 protected void setJspFactory(JspFactory jspFactory)
108 {
109 this.jspFactory = jspFactory;
110 }
111
112
113
114
115
116
117
118
119
120 private void configureResolverForJSP(JspApplicationContext appCtx, RuntimeConfig runtimeConfig)
121 {
122 FacesCompositeELResolver facesCompositeELResolver = new FacesCompositeELResolver(Scope.JSP);
123 appCtx.addELResolver(facesCompositeELResolver);
124 PhaseListener resolverForJSPInitializer = new ResolverForJSPInitializer(
125 createResolverBuilderForJSP(runtimeConfig), facesCompositeELResolver);
126
127 LifecycleFactory factory = (LifecycleFactory) FactoryFinder.getFactory(FactoryFinder.LIFECYCLE_FACTORY);
128 for (Iterator<String> iter = factory.getLifecycleIds(); iter.hasNext();)
129 {
130 factory.getLifecycle(iter.next()).addPhaseListener(resolverForJSPInitializer);
131 }
132 }
133
134 protected ELResolverBuilder createResolverBuilderForJSP(RuntimeConfig runtimeConfig)
135 {
136 return new ResolverBuilderForJSP(runtimeConfig);
137 }
138 }