11-09-2021 01:02 PM
I have a module that is supposed to display a custom freemarker template. For testing purposes, the method is just this simple:
public String start() { return "asdf"; }
And I am getting this error:
javax.servlet.ServletException: Could not resolve view with name 'asdf' in servlet with name 'alfresco-mvc.mvc'
My webscripts are in: alfresco->extension->templates->webscripts->alfresco-mvc and so is my asdf.ftl
Where should I put my templates?
Or even better, how do I get a handle to the view resolver and set the path myself?
11-16-2021 12:05 PM
it is the first time you paste that error.
Alfresco already includes a freemarker jar and it is a different version than you expect. So that is why you have to pay more attention to how you define and use things. This is not the latest spring boot version
Make some effort and I am sure you will find the best combination that works for you.
11-09-2021 02:56 PM
You can create Freemarker web pages (Surf Pages):
https://docs.alfresco.com/content-services/latest/develop/share-ext-points/surf-pages/
Or JavaScript pages (Aikau Pages):
https://docs.alfresco.com/content-services/latest/develop/share-ext-points/aikau-pages/
Spring MVC is not supported out-of-the-box by Share application.
11-09-2021 04:57 PM
I understand it's not out of the box. And I am not using Share at all. It is still a Spring application, so in theory there must be a way to generate Freemarker (or any view resolver) and plug it in.
Has anyone been able to do this?
11-10-2021 04:01 AM
Not sure if @daniel_gradecak may help with that.
He was making some experiments with that in the past:
https://github.com/dgradecak/alfresco-mvc
11-10-2021 09:28 AM
Hi,
I see that you are using alfresco-mvc. This is just a spring-mvc wrapper and is fully integrated with ACS.
The aim is to use mainly json and you either need a @RestController or a @Controller and annotated methods with @ResponseBody
But if you want to use spring views than you need to really define a Spring view but that has nothing to do with Alfresco freemarker templates and java/js controllers.
If you want to use an Alfresco webscript and its own freemarker view refer to the Alfresco docs
but if you want to understand alfresco-mvc and spring viewes than it is purely standard Spring https://www.baeldung.com/freemarker-in-spring-mvc-tutorial
11-10-2021 11:33 AM
Yes, I am using your alfresco-mvc module. (Which I must congradulate you, I use it in every alfresco project I work on. It's incredible and I thank you for making it)
My controller is annotated with @controller and my method looks like this:
@GetMapping("/testView") @ResponseBody public String getFreemarkerView() { return "test.ftl"; }
When I call this, I get the actual string "test.ftl" But when I comment out the @ResponseBody, I get,
Could not resolve view with name 'test.ftl' in servlet with name 'alfresco-mvc.mvc'
And I have a test.ftl in src/main/resources
Does it look somewhere else? Is there a way to set the template path?
11-10-2021 01:39 PM
I am glad the project helps you, it is unfortunate that alfresco does not make it stadnard
Regarding your views, I highly recommend that you make yourself familiar with spring mvc views. Each view resolver has a configuration and can be configured in many different ways.
@ResponseBody is an anotation to specify the response content type as json usually and when you remove it Spring would look for a view resolver to return a view. I would never use freemarker today, but really just configure a resolver view in the servlet context and your a set.
I sent you the link and now I am pointing you to what you need https://www.baeldung.com/freemarker-in-spring-mvc-tutorial#2-configure-viewresolver but please make your self familiar with spring mvc if you want to use it. My project just enables spring mvc in ACS and I would expect you to know how to use spring mvc.
Good luck!
11-16-2021 11:57 AM
I think I do know my MVC pretty well, but the entire problem roots from not being able to create a freemarker config object like I normally do. I havve used this succsessfully in plenty of Spring MVC applications:
@Bean public FreeMarkerViewResolver freemarkerViewResolver() { FreeMarkerViewResolver resolver = new FreeMarkerViewResolver(); resolver.setCache(true); resolver.setPrefix(""); resolver.setSuffix(".ftl"); return resolver; } @Bean public FreeMarkerConfigurer freemarkerConfig() { FreeMarkerConfigurer freeMarkerConfigurer = new FreeMarkerConfigurer(); freeMarkerConfigurer.setTemplateLoaderPath("/WEB-INF/views/ftl/"); return freeMarkerConfigurer; }
But now in alfresco, I get:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'freemarkerConfig' defined in org.gnma.alfresco.web.config.DamsServletContext: Invocation of init method failed; nested exception is java.lang.NoSuchMethodError: 'void freemarker.template.Configuration.<init>(freemarker.template.Version)'
Which is why I was moving to some other template manager.
11-16-2021 12:05 PM
it is the first time you paste that error.
Alfresco already includes a freemarker jar and it is a different version than you expect. So that is why you have to pay more attention to how you define and use things. This is not the latest spring boot version
Make some effort and I am sure you will find the best combination that works for you.
11-16-2021 12:50 PM
FYI: Configuration(Version) was added in FreeMarker 2.3.21
and alfresco uses in their latest version freemarker-2.3.20-alfresco-patched-20200421.jar
Explore our Alfresco products with the links below. Use labels to filter content by product module.