Magnolia Blossom 模块找不到 .jsp 个模板

Magnolia Blossom module can't find .jsp templates

我正在尝试使用 magnolia blossom 模块创建一些简单的模板。当我尝试显示网站时出现问题,它说它无法呈现模板(。jsp 找不到文件)。

项目结构

MainTemplate.java

@Template(id = "websiteModule:pages/mainTemplate", title = "Main Template")
@TemplateDescription("Main Template example with Blossom")
@Controller
public class MainTemplate {

  @RequestMapping("/mainTemplate")
  public String render() {
    return "pages/mainTemplate.jsp";
  }

  @TabFactory("Site Settings")
  public void homeDialog(UiConfig cfg, TabBuilder tab) {

    tab.fields(
        cfg.fields.text("title").label("Title").description("The HTML page title"),
        cfg.fields.text("metaDescription").label("Meta Description").description("HTML Meta Description of the web site"),
        cfg.fields.text("metaKeywords").label("Meta Keywords").description("HTML Meta Keywords of the web site")
    );
  }
}

花-servlet.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

  <context:annotation-config/>

  <context:component-scan base-package="com.brightit" use-default-filters="false">
    <context:include-filter type="annotation" expression="info.magnolia.module.blossom.annotation.Template"/>
    <context:include-filter type="annotation" expression="info.magnolia.module.blossom.annotation.Area"/>
    <context:include-filter type="annotation" expression="info.magnolia.module.blossom.annotation.DialogFactory"/>
    <context:include-filter type="annotation" expression="info.magnolia.module.blossom.annotation.VirtualURIMapper"/>
    <context:include-filter type="assignable" expression="info.magnolia.cms.beans.config.VirtualURIMapping"/>
  </context:component-scan>

  <bean class="info.magnolia.module.blossom.web.BlossomRequestMappingHandlerAdapter">
    <property name="customArgumentResolvers">
      <list>
        <bean class="info.magnolia.module.blossom.web.BlossomHandlerMethodArgumentResolver" />
      </list>
    </property>
    <!-- For @Valid - JSR-303 Bean Validation API -->
    <property name="webBindingInitializer">
      <bean class="org.springframework.web.bind.support.ConfigurableWebBindingInitializer">
        <property name="validator">
          <bean class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean" />
        </property>
      </bean>
    </property>
    <property name="redirectPatterns">
      <list>
        <value>website:*</value>
      </list>
    </property>
  </bean>

  <bean class="info.magnolia.module.blossom.preexecution.BlossomHandlerMapping">
    <property name="targetHandlerMappings">
      <list>
        <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping">
          <property name="useSuffixPatternMatch" value="false" />
        </bean>
        <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" />
      </list>
    </property>
  </bean>

  <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" />

  <bean class="info.magnolia.module.blossom.view.UuidRedirectViewResolver">
    <property name="order" value="1" />
  </bean>

  <!-- JSP - renders all views that end with .jsp -->
  <bean class="info.magnolia.module.blossom.view.TemplateViewResolver">
    <property name="order" value="2"/>
    <property name="prefix" value="/templates/websiteModule/"/>
    <property name="viewNames" value="*.jsp"/>
    <property name="viewRenderer">
      <bean class="info.magnolia.module.blossom.view.JspTemplateViewRenderer">
        <property name="contextAttributes">
          <map>
            <entry key="damfn">
              <bean class="info.magnolia.rendering.renderer.ContextAttributeConfiguration">
                <property name="name" value="damfn"/>
                <property name="componentClass" value="info.magnolia.dam.templating.functions.DamTemplatingFunctions"/>
              </bean>
            </entry>
          </map>
        </property>
      </bean>
    </property>
  </bean>

  <!-- Freemarker - renders all views that end with .ftl -->
  <bean class="info.magnolia.module.blossom.view.TemplateViewResolver">
    <property name="order" value="3"/>
    <property name="prefix" value="/websiteModule/"/>
    <property name="viewNames" value="*.ftl"/>
    <property name="viewRenderer">
      <bean class="info.magnolia.module.blossom.view.FreemarkerTemplateViewRenderer">
        <property name="contextAttributes">
          <map>
            <entry key="cms">
              <bean class="info.magnolia.rendering.renderer.ContextAttributeConfiguration">
                <property name="name" value="cms"/>
                <property name="componentClass" value="info.magnolia.templating.freemarker.Directives"/>
              </bean>
            </entry>
            <entry key="cmsfn">
              <bean class="info.magnolia.rendering.renderer.ContextAttributeConfiguration">
                <property name="name" value="cmsfn"/>
                <property name="componentClass" value="info.magnolia.templating.functions.TemplatingFunctions"/>
              </bean>
            </entry>
            <entry key="stkfn">
              <bean class="info.magnolia.rendering.renderer.ContextAttributeConfiguration">
                <property name="name" value="stkfn"/>
                <property name="componentClass" value="info.magnolia.module.templatingkit.functions.STKTemplatingFunctions"/>
              </bean>
            </entry>
            <!-- If you need the DAM templating functions in Freemarker uncomment this block to have them set as an attribute named 'damfn'.
            -->
            <entry key="damfn">
              <bean class="info.magnolia.rendering.renderer.ContextAttributeConfiguration">
                <property name="name" value="damfn"/>
                <property name="componentClass" value="info.magnolia.dam.templating.functions.DamTemplatingFunctions"/>
              </bean>
            </entry>
          </map>
        </property>
      </bean>
    </property>
  </bean>
</beans>

异常

2015-03-29 13:04:01,494 ERROR rendering.engine.ModeDependentRenderExceptionHandler: Error while rendering [/brightit-website] with template [websiteModule:pages/mainTemplate] for URI [/brightit-website.html=mgnlPreview=false&mgnlChannel=desktop]:
RenderException: org.springframework.web.util.NestedServletException: Request processing failed; nested exception is info.magnolia.rendering.engine.RenderException: Can't render template /templates/websiteModule/pages/mainTemplate.jsp
info.magnolia.rendering.engine.RenderException: org.springframework.web.util.NestedServletException: Request processing failed; nested exception is info.magnolia.rendering.engine.RenderException: Can't render template /templates/websiteModule/pages/mainTemplate.jsp
  at info.magnolia.module.blossom.render.BlossomTemplateRenderer.render(BlossomTemplateRenderer.java:86)
  at info.magnolia.rendering.engine.DefaultRenderingEngine.render(DefaultRenderingEngine.java:106)
  at info.magnolia.rendering.engine.DefaultRenderingEngine$$EnhancerByCGLIB$$f67b9c97.render(<generated>)
  at info.magnolia.rendering.engine.RenderingFilter.render(RenderingFilter.java:204)
  at info.magnolia.rendering.engine.RenderingFilter.handleTemplateRequest(RenderingFilter.java:139)
  at info.magnolia.rendering.engine.RenderingFilter.doFilter(RenderingFilter.java:91)
  at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:89)
  at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:80)
  at info.magnolia.module.blossom.preexecution.BlossomFilter.doFilter(BlossomFilter.java:82)
  at info.magnolia.cms.filters.OncePerRequestAbstractMgnlFilter.doFilter(OncePerRequestAbstractMgnlFilter.java:58)
  at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:80)
  at info.magnolia.rendering.model.ModelExecutionFilter.doFilter(ModelExecutionFilter.java:101)
  at info.magnolia.cms.filters.OncePerRequestAbstractMgnlFilter.doFilter(OncePerRequestAbstractMgnlFilter.java:58)
  at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:80)
  at info.magnolia.cms.filters.AggregatorFilter.doFilter(AggregatorFilter.java:103)
  at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:89)
  at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:80)
  at info.magnolia.cms.security.BaseSecurityFilter.doFilter(BaseSecurityFilter.java:57)
  at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:89)
  at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:80)
  at info.magnolia.cms.filters.RepositoryMappingFilter.doFilter(RepositoryMappingFilter.java:108)
  at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:89)
  at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:80)
  at info.magnolia.cms.filters.CompositeFilter.doFilter(CompositeFilter.java:65)
  at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:89)
  at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:80)
  at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:74)
  at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:82)
  at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:82)
  at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:82)
  at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:82)
  at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:82)
  at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:82)
  at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:82)
  at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:82)
  at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:82)
  at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:82)
  at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:82)
  at info.magnolia.cms.filters.CompositeFilter.doFilter(CompositeFilter.java:65)
  at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:89)
  at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:80)
  at info.magnolia.cms.filters.VirtualUriFilter.doFilter(VirtualUriFilter.java:68)
  at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:89)
  at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:80)
  at info.magnolia.module.cache.executor.Bypass.processCacheRequest(Bypass.java:58)
  at info.magnolia.module.cache.executor.CompositeExecutor.processCacheRequest(CompositeExecutor.java:66)
  at info.magnolia.module.cache.filter.CacheFilter.doFilter(CacheFilter.java:153)
  at info.magnolia.cms.filters.OncePerRequestAbstractMgnlFilter.doFilter(OncePerRequestAbstractMgnlFilter.java:58)
  at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:80)
  at info.magnolia.cms.i18n.I18nContentSupportFilter.doFilter(I18nContentSupportFilter.java:73)
  at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:89)
  at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:80)
  at info.magnolia.cms.filters.RangeSupportFilter.doFilter(RangeSupportFilter.java:84)
  at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:89)
  at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:80)
  at info.magnolia.cms.security.BaseSecurityFilter.doFilter(BaseSecurityFilter.java:57)
  at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:89)
  at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:80)
  at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:82)
  at info.magnolia.cms.security.SecurityCallbackFilter.doFilter(SecurityCallbackFilter.java:83)
  at info.magnolia.cms.filters.OncePerRequestAbstractMgnlFilter.doFilter(OncePerRequestAbstractMgnlFilter.java:58)
  at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:80)
  at info.magnolia.cms.security.LogoutFilter.doFilter(LogoutFilter.java:94)
  at info.magnolia.cms.filters.OncePerRequestAbstractMgnlFilter.doFilter(OncePerRequestAbstractMgnlFilter.java:58)
  at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:80)
  at info.magnolia.module.templatingkit.filters.SiteMergeFilter.doFilter(SiteMergeFilter.java:112)
  at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:89)
  at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:80)
  at info.magnolia.cms.filters.MultiChannelFilter.doFilter(MultiChannelFilter.java:82)
  at info.magnolia.cms.filters.OncePerRequestAbstractMgnlFilter.doFilter(OncePerRequestAbstractMgnlFilter.java:58)
  at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:80)
  at info.magnolia.module.cache.filter.GZipFilter.doFilter(GZipFilter.java:73)
  at info.magnolia.cms.filters.OncePerRequestAbstractMgnlFilter.doFilter(OncePerRequestAbstractMgnlFilter.java:58)
  at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:80)
  at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:82)
  at info.magnolia.cms.security.auth.login.LoginFilter.doFilter(LoginFilter.java:120)
  at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:89)
  at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:80)
  at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:82)
  at info.magnolia.cms.filters.CosMultipartRequestFilter.doFilter(CosMultipartRequestFilter.java:89)
  at info.magnolia.cms.filters.OncePerRequestAbstractMgnlFilter.doFilter(OncePerRequestAbstractMgnlFilter.java:58)
  at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:80)
  at info.magnolia.module.devicedetection.filter.DeviceDetectionFilter.doFilter(DeviceDetectionFilter.java:71)
  at info.magnolia.cms.filters.OncePerRequestAbstractMgnlFilter.doFilter(OncePerRequestAbstractMgnlFilter.java:58)
  at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:80)
  at info.magnolia.cms.filters.ContentTypeFilter.doFilter(ContentTypeFilter.java:112)
  at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:89)
  at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:80)
  at info.magnolia.cms.filters.ContextFilter.doFilter(ContextFilter.java:129)
  at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:89)
  at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:80)
  at info.magnolia.cms.filters.CompositeFilter.doFilter(CompositeFilter.java:65)
  at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:89)
  at info.magnolia.cms.filters.SafeDestroyMgnlFilterWrapper.doFilter(SafeDestroyMgnlFilterWrapper.java:106)
  at info.magnolia.cms.filters.MgnlFilterDispatcher.doDispatch(MgnlFilterDispatcher.java:66)
  at info.magnolia.cms.filters.MgnlMainFilter.doFilter(MgnlMainFilter.java:107)
  at info.magnolia.cms.filters.MgnlMainFilter.doFilter(MgnlMainFilter.java:93)
  at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
  at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
  at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
  at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
  at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:504)
  at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
  at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
  at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
  at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
  at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:421)
  at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1074)
  at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611)
  at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)
  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
  at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
  at java.lang.Thread.run(Thread.java:745)
Caused by: org.springframework.web.util.NestedServletException: Request processing failed; nested exception is info.magnolia.rendering.engine.RenderException: Can't render template /templates/websiteModule/pages/mainTemplate.jsp
  at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:965)
  at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:844)
  at javax.servlet.http.HttpServlet.service(HttpServlet.java:620)
  at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:829)
  at info.magnolia.module.blossom.render.BlossomDispatcherServlet.forward(BlossomDispatcherServlet.java:132)
  at info.magnolia.module.blossom.render.BlossomTemplateRenderer.render(BlossomTemplateRenderer.java:78)
  ... 113 more
Caused by: info.magnolia.rendering.engine.RenderException: Can't render template /templates/websiteModule/pages/mainTemplate.jsp
  at info.magnolia.rendering.renderer.JspRenderer.onRender(JspRenderer.java:80)
  at info.magnolia.module.blossom.view.JspTemplateViewRenderer.onRender(JspTemplateViewRenderer.java:95)
  at info.magnolia.rendering.renderer.AbstractRenderer.render(AbstractRenderer.java:151)
  at info.magnolia.module.blossom.view.TemplateView.renderMergedOutputModel(TemplateView.java:74)
  at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:264)
  at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1208)
  at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:992)
  at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:939)
  at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856)
  at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:953)
  ... 118 more
Caused by: java.lang.RuntimeException: javax.servlet.ServletException: File &quot;/templates/websiteModule/pages/mainTemplate.jsp&quot; not found
  at info.magnolia.context.WebContextImpl.include(WebContextImpl.java:197)
  at info.magnolia.rendering.renderer.JspRenderer.onRender(JspRenderer.java:74)
  ... 127 more
Caused by: javax.servlet.ServletException: File &quot;/templates/websiteModule/pages/mainTemplate.jsp&quot; not found
  at org.apache.jasper.servlet.JspServlet.handleMissingResource(JspServlet.java:417)
  at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:384)
  at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:339)
  at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
  at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
  at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
  at info.magnolia.cms.filters.MgnlFilterDispatcher.doDispatch(MgnlFilterDispatcher.java:74)
  at info.magnolia.cms.filters.MgnlMainFilter.doFilter(MgnlMainFilter.java:107)
  at info.magnolia.cms.filters.MgnlMainFilter.doFilter(MgnlMainFilter.java:93)
  at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
  at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
  at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:748)
  at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:604)
  at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:543)
  at info.magnolia.module.blossom.support.ForwardRequestWrapper.include(ForwardRequestWrapper.java:192)
  at info.magnolia.context.WebContextImpl.include(WebContextImpl.java:194)
  ... 128 more

如果我使用 FreeMaker(.ftl) 而不是 .jsp 一切正常。知道我做错了什么吗?

看看安装模块时文件系统中提取的那些jsp在哪里。我的猜测是您正在寻找的那个被提取到 /templates/websiteModule/pages/mainTemplate.jsp,因此使用该路径您应该能够找到它。

HTH,
一月