Adding ability to resolve flow-local Spring Beans from EL expressions.

This commit is contained in:
Jeremy Grelle
2008-02-26 23:01:40 +00:00
parent 20afdef07c
commit af3ab0fcd4
3 changed files with 63 additions and 6 deletions

View File

@@ -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);

View File

@@ -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;
}
}

View File

@@ -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;
}
}
}