diff --git a/spring-faces/src/main/java/org/springframework/faces/expression/LegacyJSFELExpressionParser.java b/spring-faces/src/main/java/org/springframework/faces/expression/LegacyJSFELExpressionParser.java index 02e988a1..03ac35a4 100644 --- a/spring-faces/src/main/java/org/springframework/faces/expression/LegacyJSFELExpressionParser.java +++ b/spring-faces/src/main/java/org/springframework/faces/expression/LegacyJSFELExpressionParser.java @@ -15,6 +15,7 @@ import org.springframework.binding.expression.el.ELExpressionParser; import org.springframework.webflow.core.collection.MutableAttributeMap; import org.springframework.webflow.core.expression.el.RequestContextELResolver; import org.springframework.webflow.core.expression.el.ScopeSearchingELResolver; +import org.springframework.webflow.core.expression.el.SpringBeanWebFlowELResolver; import org.springframework.webflow.execution.RequestContext; /** @@ -46,6 +47,7 @@ public class LegacyJSFELExpressionParser extends ELExpressionParser { public ELContext getELContext(Object target) { List customResolvers = new ArrayList(); customResolvers.add(new RequestContextELResolver()); + customResolvers.add(new SpringBeanWebFlowELResolver()); customResolvers.add(new ScopeSearchingELResolver()); customResolvers.add(new LegacyJSFBeanResolver()); ELResolver resolver = new DefaultELResolver(target, customResolvers); diff --git a/spring-faces/src/main/java/org/springframework/faces/webflow/JsfViewFactoryCreator.java b/spring-faces/src/main/java/org/springframework/faces/webflow/JsfViewFactoryCreator.java index 56ee6ddd..814a6580 100644 --- a/spring-faces/src/main/java/org/springframework/faces/webflow/JsfViewFactoryCreator.java +++ b/spring-faces/src/main/java/org/springframework/faces/webflow/JsfViewFactoryCreator.java @@ -34,16 +34,12 @@ public class JsfViewFactoryCreator implements ViewFactoryCreator { private Lifecycle lifecycle; - public JsfViewFactoryCreator() { - lifecycle = createFlowFacesLifecycle(); - } - public Action createFinalResponseAction(Expression viewName, ResourceLoader resourceLoader) { - return new JsfFinalResponseAction(new JsfViewFactory(viewName, resourceLoader, lifecycle)); + return new JsfFinalResponseAction(new JsfViewFactory(viewName, resourceLoader, getLifecycle())); } public ViewFactory createViewFactory(Expression viewName, ResourceLoader resourceLoader) { - return new JsfViewFactory(viewName, resourceLoader, lifecycle); + return new JsfViewFactory(viewName, resourceLoader, getLifecycle()); } private Lifecycle createFlowFacesLifecycle() { @@ -53,4 +49,11 @@ public class JsfViewFactoryCreator implements ViewFactoryCreator { return new FlowLifecycle(defaultLifecycle); } + private Lifecycle getLifecycle() { + if (lifecycle == null) { + lifecycle = createFlowFacesLifecycle(); + } + return lifecycle; + } + } diff --git a/spring-faces/src/test/java/org/springframework/faces/ui/resource/ResourceServletTests.java b/spring-faces/src/test/java/org/springframework/faces/ui/resource/ResourceServletTests.java new file mode 100644 index 00000000..f150083e --- /dev/null +++ b/spring-faces/src/test/java/org/springframework/faces/ui/resource/ResourceServletTests.java @@ -0,0 +1,52 @@ +package org.springframework.faces.ui.resource; + +import javax.servlet.ServletConfig; +import javax.servlet.ServletContext; + +import junit.framework.TestCase; + +import org.springframework.mock.web.MockHttpServletRequest; +import org.springframework.mock.web.MockHttpServletResponse; +import org.springframework.mock.web.MockServletConfig; +import org.springframework.mock.web.MockServletContext; + +public class ResourceServletTests extends TestCase { + + ServletContext servletContext = new ResourceTestMockServletContext(); + ServletConfig config = new MockServletConfig(servletContext); + MockHttpServletResponse response = new MockHttpServletResponse(); + MockHttpServletRequest request = new MockHttpServletRequest(); + + String[] requestElements; + + ResourceServlet servlet; + + protected void setUp() throws Exception { + servlet = new ResourceServlet(); + servlet.init(config); + } + + public final void testExecute() throws Exception { + + String requestPath = "/dojo/dojo.js"; + request.setPathInfo(requestPath); + servlet.doGet(request, response); + } + + public final void testExecute_ResourceNotFound() throws Exception { + + String requestPath = "/xxx/xxx.js"; + request.setPathInfo(requestPath); + servlet.doGet(request, response); + + assertEquals(404, response.getStatus()); + } + + private class ResourceTestMockServletContext extends MockServletContext { + + public String getMimeType(String filePath) { + return null; + } + + } +}