【问题标题】:Thymeleaf(th:action) not working when rendering long html渲染长html时Thymeleaf(th:action)不起作用
【发布时间】:2020-03-31 07:26:30
【问题描述】:

最近在学习Spring Boot + thymeleaf,发现一个奇怪的错误。

register.html

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="stylesheet" type="text/css" th:href="@{/lib/bootstrap/css/bootstrap.min.css}" />
    <link rel="stylesheet" type="text/css" th:href="@{/lib/font-awesome/css/font-awesome.min.css}" />
    <link rel="stylesheet" type="text/css" th:href="@{/lib/select2/css/select2.min.css}" />
    <link rel="stylesheet" type="text/css" th:href="@{/lib/jquery.bxslider/jquery.bxslider.css}" />
    <link rel="stylesheet" type="text/css" th:href="@{/lib/owl.carousel/owl.carousel.css}" />
    <link rel="stylesheet" type="text/css" th:href="@{/lib/jquery-ui/jquery-ui.css}" />
    <link rel="stylesheet" type="text/css" th:href="@{/css/animate.css}" />
    <link rel="stylesheet" type="text/css" th:href="@{/css/reset.css}" />
    <link rel="stylesheet" type="text/css" th:href="@{/css/style.css}" />
    <link rel="stylesheet" type="text/css" th:href="@{/css/responsive.css}" />
    <title>Register - Kute shop</title>
</head>
<body class="category-page">
<!-- HEADER -->
<div id="header" class="header">

    <!-- END MANIN HEADER -->
    <div class="row">

        <div id="main-menu" class="col-sm-9 main-menu">
            <nav class="navbar navbar-default">
                <div class="container-fluid">
                    <div class="navbar-header">
                        <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
                            <i class="fa fa-bars"></i>
                        </button>
                        <a class="navbar-brand" href="#">MENU</a>
                    </div>
                    <div id="navbar" class="navbar-collapse collapse">
                        <ul class="nav navbar-nav">

                            <li class="dropdown">
                                <a href="category.html" class="dropdown-toggle" data-toggle="dropdown">Foods</a>
                                <ul class="mega_dropdown dropdown-menu" style="width: 830px;">
                                    <li class="block-container col-sm-3">
                                        <ul class="block">
                                            <li class="link_container group_header">
                                                <a href="#">Asian</a>
                                            </li>
                                            <li class="link_container">
                                                <a href="#">Vietnamese Pho</a>
                                            </li>
                                            <li class="link_container">
                                                <a href="#">Noodles</a>
                                            </li>
                                            <li class="link_container">
                                                <a href="#">Seafood</a>
                                            </li>
                                            <li class="link_container group_header">
                                                <a href="#">Sausages</a>
                                            </li>
                                            <li class="link_container">
                                                <a href="#">Meat Dishes</a>
                                            </li>
                                            <li class="link_container">
                                                <a href="#">Desserts</a>
                                            </li>
                                            <li class="link_container">
                                                <a href="#">Tops</a>
                                            </li>
                                            <li class="link_container">
                                                <a href="#">Tops</a>
                                            </li>
                                        </ul>
                                    </li>
                                    <li class="block-container col-sm-3">
                                        <ul class="block">
                                            <li class="link_container group_header">
                                                <a href="#">European</a>
                                            </li>
                                            <li class="link_container">
                                                <a href="#">Greek Potatoes</a>
                                            </li>
                                            <li class="link_container">
                                                <a href="#">Famous Spaghetti</a>
                                            </li>
                                            <li class="link_container">
                                                <a href="#">Famous Spaghetti</a>
                                            </li>
                                            <li class="link_container group_header">
                                                <a href="#">Chicken</a>
                                            </li>
                                            <li class="link_container">
                                                <a href="#">Italian Pizza</a>
                                            </li>
                                            <li class="link_container">
                                                <a href="#">French Cakes</a>
                                            </li>
                                            <li class="link_container">
                                                <a href="#">Tops</a>
                                            </li>
                                            <li class="link_container">
                                                <a href="#">Tops</a>
                                            </li>
                                        </ul>
                                    </li>
                                    <li class="block-container col-sm-3">
                                        <ul class="block">
                                            <li class="link_container group_header">
                                                <a href="#">FAST</a>
                                            </li>
                                            <li class="link_container">
                                                <a href="#">Hamberger</a>
                                            </li>
                                            <li class="link_container">
                                                <a href="#">Pizza</a>
                                            </li>
                                            <li class="link_container">
                                                <a href="#">Noodles</a>
                                            </li>
                                            <li class="link_container group_header">
                                                <a href="#">Sandwich</a>
                                            </li>
                                            <li class="link_container">
                                                <a href="#">Salad</a>
                                            </li>
                                            <li class="link_container">
                                                <a href="#">Paste</a>
                                            </li>
                                            <li class="link_container">
                                                <a href="#">Tops</a>
                                            </li>
                                            <li class="link_container">
                                                <a href="#">Tops</a>
                                            </li>
                                        </ul>
                                    </li>
                                    <li class="block-container col-sm-3">
                                        <ul class="block">
                                            <li class="img_container">
                                                <img th:src="@{/data/banner-topmenu.jpg}" alt="Banner">
                                            </li>
                                        </ul>
                                    </li>

                                </ul>
                            </li>
                            <li class="dropdown">
                                <a href="category.html" class="dropdown-toggle" data-toggle="dropdown">Digital</a>
                                <ul class="dropdown-menu container-fluid">
                                    <li class="block-container">
                                        <ul class="block">
                                            <li class="link_container"><a href="#">Mobile</a></li>
                                            <li class="link_container"><a href="#">Tablets</a></li>
                                            <li class="link_container"><a href="#">Laptop</a></li>
                                            <li class="link_container"><a href="#">Memory Cards</a></li>
                                            <li class="link_container"><a href="#">Accessories</a></li>
                                        </ul>
                                    </li>
                                </ul>
                            </li>
                            <li><a href="category.html">Furniture</a></li>
                            <li><a href="category.html">Jewelry</a></li>
                            <li class="dropdown">
                                <a href="category.html" class="dropdown-toggle" data-toggle="dropdown">Pages</a>
                                <ul class="mega_dropdown dropdown-menu" style="width: 830px;">
                                    <li class="block-container col-sm-4">
                                        <ul class="block">
                                            <li class="link_container group_header">
                                                <a href="#">Page</a>
                                            </li>
                                            <li class="link_container">
                                                <a href="category.html">Category Left Sidebar</a>
                                            </li>
                                            <li class="link_container">
                                                <a href="category2.html">Category Right Sidebar</a>
                                            </li>
                                            <li class="link_container">
                                                <a href="detail.html">Product Left Sidebar</a>
                                            </li>

                                            <li class="link_container">
                                                <a href="detail2.html">Product Full width</a>
                                            </li>
                                            <li class="link_container">
                                                <a href="detail3.html">Product Right Sidebar</a>
                                            </li>
                                        </ul>
                                    </li>
                                    <li class="block-container col-sm-4">
                                        <ul class="block">
                                            <li class="link_container group_header">
                                                <a href="#">Page</a>
                                            </li>
                                            <li class="link_container">
                                                <a href="wishlist.html">Wishlist</a>
                                            </li>
                                            <li class="link_container">
                                                <a href="compare.html">Compare</a>
                                            </li>
                                            <li class="link_container">
                                                <a href="order.html">Order</a>
                                            </li>
                                            <li class="link_container">
                                                <a href="checkout.html">Checkout</a>
                                            </li>
                                            <li class="link_container">
                                                <a href="login.html">Login</a>
                                            </li>
                                        </ul>
                                    </li>
                                    <li class="block-container col-sm-4">
                                        <ul class="block">
                                            <li class="link_container group_header">
                                                <a href="#">Page</a>
                                            </li>
                                            <li class="link_container">
                                                <a href="blog.html">Blog</a>
                                            </li>
                                            <li class="link_container">
                                                <a href="blog-detail.html">Blog Post</a>
                                            </li>
                                            <li class="link_container">
                                                <a href="contact.html">Contact Us</a>
                                            </li>
                                            <li class="link_container">
                                                <a href="about.html">About Us</a>
                                            </li>
                                        </ul>
                                    </li>
                                </ul>
                            </li>
                        </ul>
                    </div><!--/.nav-collapse -->
                </div>
            </nav>
        </div>
    </div>
</div>
<!-- end header -->
<!-- page wapper-->
<div class="columns-container">
    <div class="container" id="columns">

        <form action="#" method="post" role="form" th:action="@{/addNew}">
            <div class="box-authentication">
                <h3>Create an account</h3>
                <p>Please enter your email address to create an account.</p>

                <label for="emmail_register">Email address</label>
                <input id="emmail_register" type="text" class="form-control">

                <label for="password_register">Password</label>
                <input id="password_register" type="password" class="form-control">

                <p class="forgot-pass"><a href="#">Forgot your password?</a></p>
                <button class="button"><i class="fa fa-lock"></i> Sign up</button>
            </div>
        </form>

    </div>
</div>
<!-- ./page wapper-->
<!-- Footer -->

<a href="#" class="scroll_top" title="Scroll to Top" style="display: inline;">Scroll</a>
</body>
</html>

当我运行 SpringBoot 时,它显示以下错误:

org.thymeleaf.exceptions.TemplateProcessingException: Error during execution of processor 'org.thymeleaf.spring5.processor.SpringActionTagProcessor' (template: "register" - line 244, col 52)
    at org.thymeleaf.processor.element.AbstractAttributeTagProcessor.doProcess(AbstractAttributeTagProcessor.java:117) ~[thymeleaf-3.0.11.RELEASE.jar:3.0.11.RELEASE]
    at org.thymeleaf.processor.element.AbstractElementTagProcessor.process(AbstractElementTagProcessor.java:95) ~[thymeleaf-3.0.11.RELEASE.jar:3.0.11.RELEASE]
    at org.thymeleaf.util.ProcessorConfigurationUtils$ElementTagProcessorWrapper.process(ProcessorConfigurationUtils.java:633) ~[thymeleaf-3.0.11.RELEASE.jar:3.0.11.RELEASE]
    at org.thymeleaf.engine.ProcessorTemplateHandler.handleOpenElement(ProcessorTemplateHandler.java:1314) ~[thymeleaf-3.0.11.RELEASE.jar:3.0.11.RELEASE]
    at org.thymeleaf.engine.TemplateHandlerAdapterMarkupHandler.handleOpenElementEnd(TemplateHandlerAdapterMarkupHandler.java:304) ~[thymeleaf-3.0.11.RELEASE.jar:3.0.11.RELEASE]
    at org.thymeleaf.templateparser.markup.InlinedOutputExpressionMarkupHandler$InlineMarkupAdapterPreProcessorHandler.handleOpenElementEnd(InlinedOutputExpressionMarkupHandler.java:278) ~[thymeleaf-3.0.11.RELEASE.jar:3.0.11.RELEASE]
    at org.thymeleaf.standard.inline.OutputExpressionInlinePreProcessorHandler.handleOpenElementEnd(OutputExpressionInlinePreProcessorHandler.java:186) ~[thymeleaf-3.0.11.RELEASE.jar:3.0.11.RELEASE]
    at org.thymeleaf.templateparser.markup.InlinedOutputExpressionMarkupHandler.handleOpenElementEnd(InlinedOutputExpressionMarkupHandler.java:124) ~[thymeleaf-3.0.11.RELEASE.jar:3.0.11.RELEASE]
    at org.attoparser.HtmlElement.handleOpenElementEnd(HtmlElement.java:109) ~[attoparser-2.0.5.RELEASE.jar:2.0.5.RELEASE]
    at org.attoparser.HtmlMarkupHandler.handleOpenElementEnd(HtmlMarkupHandler.java:297) ~[attoparser-2.0.5.RELEASE.jar:2.0.5.RELEASE]
    at org.attoparser.MarkupEventProcessorHandler.handleOpenElementEnd(MarkupEventProcessorHandler.java:402) ~[attoparser-2.0.5.RELEASE.jar:2.0.5.RELEASE]
    at org.attoparser.ParsingElementMarkupUtil.parseOpenElement(ParsingElementMarkupUtil.java:159) ~[attoparser-2.0.5.RELEASE.jar:2.0.5.RELEASE]
    at org.attoparser.MarkupParser.parseBuffer(MarkupParser.java:710) ~[attoparser-2.0.5.RELEASE.jar:2.0.5.RELEASE]
    at org.attoparser.MarkupParser.parseDocument(MarkupParser.java:301) ~[attoparser-2.0.5.RELEASE.jar:2.0.5.RELEASE]
    ... 84 common frames omitted 

第 244 行是带有th:action 的表单标签。但是,如果我删除div#header 中的任何一行或将li 标记转换为一行,它就会成功呈现。这真的很有趣。似乎 thymeleaf 只呈现比上述更短的 html。我的 Spring 版本是2.2.1,jdk 版本是1.8。可能是什么问题?

【问题讨论】:

标签: java spring-boot intellij-idea thymeleaf


【解决方案1】:

你需要添加标签,如下:

<html  xmlns:th="http://www.thymeleaf.org">

【讨论】:

  • 我试过了,但它不起作用。我认为没有必要添加 xml 命名空间。正如我在问题中提到的,如果我删除一行它会正确呈现。
  • 我猜是你的开发环境有问题,我在 thymeleaf 文件上运行没有任何异常
猜你喜欢
  • 2016-02-16
  • 2021-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-16
  • 2019-06-04
相关资源
最近更新 更多