当前位置: 首页 > 知识库问答 >
问题:

thymeleaf模板的多个文件夹配置

皮自明
2023-03-14

我有一个简单的基于Spring的项目,它使用thymeleaf,在我的context.xml文件中定义。为了更好地组织项目,可重用的模板块被放在子文件夹中。这张照片会给你一个更好的主意。

我能够"包含"模板下的所有html页面中定义的模板,但到目前为止,在包括上篮文件夹下定义的模板不成功。

下面是我上下文中的bean定义。xml文件

<bean id="templateResolver"
    class="org.thymeleaf.templateresolver.ServletContextTemplateResolver">
    <property name="prefix" value="/WEB-INF/templates/" />
    <property name="suffix" value=".html" />
    <property name="templateMode" value="HTML5" />
    <property name="characterEncoding" value="UTF-8" />
    <property name="order" value="1" />
    <property name="cacheable" value="false" />
</bean>


<bean id="formTemplateResolver"
    class="org.thymeleaf.templateresolver.ServletContextTemplateResolver">
    <property name="prefix" value="/WEB-INF/templates/layup/" />
    <property name="suffix" value=".html" />
    <property name="templateMode" value="HTML5" />
    <property name="order" value="2" />
    <property name="cacheable" value="false" />
</bean>

<bean id="multipartResolver"
    class="org.springframework.web.multipart.commons.CommonsMultipartResolver" />

<bean id="templateEngine" class="org.thymeleaf.spring4.SpringTemplateEngine">
    <property name="templateResolvers">
        <set>
            <ref bean="templateResolver" />
            <ref bean="formTemplateResolver" />
        </set>
    </property>
    <property name="additionalDialects">
        <set>
            <bean
                class="org.thymeleaf.extras.springsecurity3.dialect.SpringSecurityDialect" />
        </set>
    </property>
</bean>

<bean class="org.thymeleaf.spring4.view.ThymeleafViewResolver">
    <property name="templateEngine" ref="templateEngine" />
    <property name="characterEncoding" value="UTF-8" />
</bean>

我在这里提到了这个链接。

这是我正在获得的错误堆栈。

SEVERE: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'templateResolver' defined in class path resource [servlet-context.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [org.thymeleaf.templateresolver.ServletContextTemplateResolver]: No default constructor found; nested exception is java.lang.NoSuchMethodException: org.thymeleaf.templateresolver.ServletContextTemplateResolver.<init>()
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1076)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1021)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:504)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:304)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:300)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:195)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:700)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:760)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:482)
at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:381)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:293)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:106)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4236)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4739)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:803)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:780)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:583)
at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:944)
at org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:779)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:505)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1322)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:325)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:142)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1069)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:822)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1061)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:463)
at org.apache.catalina.core.StandardService.start(StandardService.java:525)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:759)
at org.apache.catalina.startup.Catalina.start(Catalina.java:595)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414) Caused by: org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [org.thymeleaf.templateresolver.ServletContextTemplateResolver]: No default constructor found; nested exception is java.lang.NoSuchMethodException: org.thymeleaf.templateresolver.ServletContextTemplateResolver.<init>()
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:85)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1069)
... 37 more Caused by: java.lang.NoSuchMethodException: org.thymeleaf.templateresolver.ServletContextTemplateResolver.<init>()
at java.lang.Class.getConstructor0(Class.java:3082)
at java.lang.Class.getDeclaredConstructor(Class.java:2178)
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:80)
... 38 more

我如何解决这个问题?

编辑-根据请求使用控制器代码更新问题

@RequestMapping(value = "/firstTab", method = RequestMethod.GET)
public String firstTab(){
    return "firstTabFormPage :: firstTabForm";
}

一旦部署,我就面临异常。我的webapps文件夹中的war文件并启动tomcat。获得的错误堆栈发布在主问题中。

共有1个答案

浦出野
2023-03-14

我终于能够找出我的错误。我做了两个。

>

  • 我在控制器中的返回语句是错误的。它应该

     @RequestMapping(value = "/firstTab", method = RequestMethod.GET)
      public String firstTab(){
      return "layup/firstTabFormPage :: firstTabForm";
     }
    

    我忘记在返回语句中包含父文件夹名称。

    我在我的*中包含JavaScript代码。html页面之间的以下内容

    <th:block th:fragment="myScripts">
    <script type="text/javascript" th:inline="javascript">
    /*<![CDATA[*/
         <_my_scripts_here_>
    /*]]>*/
    </script>
    </th:block>
    

    并将它们直接包含在我的html第th段中

    <th:block th:include="myHtmlPage::myScripts"></th:block>
    

    我想把它包括在内

    <th:block th:include="layup/myHtmlPage::myScripts"></th:block>
    

    i、 e完整地址,包括父文件夹(存放)和所有。

    在同一行上,可能有一个复杂的文件夹结构,并且可以轻松地映射所有文件夹。

  •  类似资料:
    • 问题内容: 我正在尝试使用Django,并弄清楚如何设置urls.py以及URL如何工作。我已经在项目的根目录中配置了urls.py,以定向到我的博客和管理员。但是,现在我想在首页添加一个页面,所以在。 因此,我在项目根目录的urls.py中添加了以下代码: 问题是它在blog / templates / …中搜索模板, 而不是在我的根目录中搜索template文件夹。其中包含base.html。

    • 有人知道为什么会抛出下面的错误吗? TemplateInputException:解析模板“DirectBind”时出错,模板可能不存在,或者任何已配置的模板解析程序都无法访问模板。

    • 我正在使用SpringBoot和thymeleaf从html模板生成文档。 随着模板的不断变化,我希望ti从外部加载模板,只是从外部添加或删除模板,而不是重新部署应用程序。 作为POC,使用/resources文件夹时效果良好。 这就是错误: 解析模板“凭证”时出错,该模板可能不存在,或者任何已配置的模板解析程序都无法访问该模板 这就是背景: applycation.yml 这是我的方法:其中te

    • 模板文件一定要小写下划线,如 list_pubu.html 你可以给你每一个模板文件增加一个json配置文件,用于描述这个模板文件;配置文件和模板文件名是同名的,只是后缀为 json,如simpleboot3/portal/index.html模板文件的配置文件就是simpleboot3/portal/index.json; 一个简单的配置文件内容如下: { "name": "门户应用首页

    • 模板文件一定要小写下划线,如 list_pubu.html 你可以给你每一个模板文件增加一个json配置文件,用于描述这个模板文件;配置文件和模板文件名是同名的,只是后缀为 json,如simpleboot3/portal/index.html模板文件的配置文件就是simpleboot3/portal/index.json; 一个简单的配置文件内容如下: { "name": "门户应用首页

    • 我有以下bean配置 以下函数用于发送解析模板和发送电子邮件。 但这会给出一个FileNotFound异常。