I have been trying to port some of my grails 2 code to grails 3. This specific code uses grails-webflow plugin (which was supported only till grails 2.x; it is broken right now because some overhauling in grails core).
So I decided to directly use spring webflow inside my app. I have been able to do the basic plumbing. That is I have setup * application context for webflow * created flow factories and all * wrote the flow xml. * created other necessary beans.
Now, when I hit the url that is mapped to my flow, I can see that my .gsp page is rendering. But problem is, its not resolving the layout. And page is coming without any styling/layout. What I am missing ?
This is my gsp page.
<html>
<head>
<title><g:brandedTitle/> - Repository Database: Administrator</title>
<meta content="main" name="layout"/>
<script type="text/javascript" src="${assetPath(src: 'da.js')}"></script>
....
....
This is how I have done the plumbing for webflow.
@Configuration
@ComponentScan
class InstallRepositoryWebflow extends AbstractFlowConfiguration {
@Autowired
GroovyPagesTemplateEngine groovyPagesTemplateEngine;
@Autowired
GroovyPageLocator groovyPageLocator;
@Autowired
GrailsLayoutViewResolver grailsLayoutViewResolver;
@Bean
public FlowDefinitionRegistry flowRegistry() {
return getFlowDefinitionRegistryBuilder(flowBuilderServices())
// type on browser localhost:<port>/<context-path>/hitMeToInvokeThisFlow to invoke this flow.
.addFlowLocation("/WEB-INF/flows/install-repository.xml", "installrep/install")
.build();
}
@Bean
public FlowExecutor flowExecutor() {
return getFlowExecutorBuilder(flowRegistry()).build();
}
@Bean
public FlowBuilderServices flowBuilderServices() {
return getFlowBuilderServicesBuilder()
.setViewFactoryCreator(viewFactoryCreator())
.build();
}
@Bean
public ViewFactoryCreator viewFactoryCreator() {
List<ViewResolver> resolvers = new ArrayList<>(1);
resolvers.add(gspViewResolver());
resolvers.add(grailsLayoutViewResolver);
ViewFactoryCreator creator = new MvcViewFactoryCreator();
creator.setViewResolvers(resolvers);
return creator;
}
@Bean
ViewResolver gspViewResolver() {
GroovyPageViewResolver innerGspViewResolver = new GroovyPageViewResolver(groovyPagesTemplateEngine, groovyPageLocator);
//innerGspViewResolver.setAllowGrailsViewCaching(!gspReloadingEnabled || viewCacheTimeout != 0);
//innerGspViewResolver.setCacheTimeout(gspReloadingEnabled ? viewCacheTimeout : -1);
return innerGspViewResolver;
}
}
And this is the relevant section from resource.groovy
flowHandlerAdapter(FlowHandlerAdapter) {
flowExecutor = ref("flowExecutor");
}
flowHandlerMapping(FlowHandlerMapping) {
flowRegistry = ref("flowRegistry");
}
QUESTION IS Why is my layout not being rendered ? What Am I missing ?