0

I'm having some problems that i don't know how to solve. I need to add an "new house" system to my real estate advertisement site. So i added a button in the advertise management page linking to a dashboard page, when i click the button, it goes to a whitelabel error page with this error:

There was an unexpected error (type=Internal Server Error, status=500).
An error happened during template parsing (template: "class path resource [templates//dashboard-locador.html]")
org.thymeleaf.exceptions.TemplateInputException: An error happened during template parsing (template: "class path resource [templates//dashboard-locador.html]")
    at org.thymeleaf.templateparser.markup.AbstractMarkupTemplateParser.parse(AbstractMarkupTemplateParser.java:241)
    at org.thymeleaf.templateparser.markup.AbstractMarkupTemplateParser.parseStandalone(AbstractMarkupTemplateParser.java:100)
    at org.thymeleaf.engine.TemplateManager.parseAndProcess(TemplateManager.java:666)
    at org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1098)
    at org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1072)
    at org.thymeleaf.spring5.view.ThymeleafView.renderFragment(ThymeleafView.java:366)
    at org.thymeleaf.spring5.view.ThymeleafView.render(ThymeleafView.java:190)
    at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1400)
    at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1145)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1084)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:655)
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:764)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
    at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
    at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:540)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357)
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382)
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:895)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1722)
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
    at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.base/java.lang.Thread.run(Thread.java:833)
Caused by: org.attoparser.ParseException: Cannot process attribute '{th:field,data-th-field}': no associated BindStatus could be found for the intended form binding operations. This can be due to the lack of a proper management of the Spring RequestContext, which is usually done through the ThymeleafView or ThymeleafReactiveView (template: "/dashboard-locador" - line 70, col 92)
    at org.attoparser.MarkupParser.parseDocument(MarkupParser.java:393)
    at org.attoparser.MarkupParser.parse(MarkupParser.java:257)
    at org.thymeleaf.templateparser.markup.AbstractMarkupTemplateParser.parse(AbstractMarkupTemplateParser.java:230)
    ... 48 more
Caused by: org.thymeleaf.exceptions.TemplateProcessingException: Cannot process attribute '{th:field,data-th-field}': no associated BindStatus could be found for the intended form binding operations. This can be due to the lack of a proper management of the Spring RequestContext, which is usually done through the ThymeleafView or ThymeleafReactiveView (template: "/dashboard-locador" - line 70, col 92)
    at org.thymeleaf.spring5.processor.AbstractSpringFieldTagProcessor.doProcess(AbstractSpringFieldTagProcessor.java:177)
    at org.thymeleaf.processor.element.AbstractAttributeTagProcessor.doProcess(AbstractAttributeTagProcessor.java:74)
    at org.thymeleaf.processor.element.AbstractElementTagProcessor.process(AbstractElementTagProcessor.java:95)
    at org.thymeleaf.util.ProcessorConfigurationUtils$ElementTagProcessorWrapper.process(ProcessorConfigurationUtils.java:633)
    at org.thymeleaf.engine.ProcessorTemplateHandler.handleOpenElement(ProcessorTemplateHandler.java:1314)
    at org.thymeleaf.engine.TemplateHandlerAdapterMarkupHandler.handleOpenElementEnd(TemplateHandlerAdapterMarkupHandler.java:304)
    at org.thymeleaf.templateparser.markup.InlinedOutputExpressionMarkupHandler$InlineMarkupAdapterPreProcessorHandler.handleOpenElementEnd(InlinedOutputExpressionMarkupHandler.java:278)
    at org.thymeleaf.standard.inline.OutputExpressionInlinePreProcessorHandler.handleOpenElementEnd(OutputExpressionInlinePreProcessorHandler.java:186)
    at org.thymeleaf.templateparser.markup.InlinedOutputExpressionMarkupHandler.handleOpenElementEnd(InlinedOutputExpressionMarkupHandler.java:124)
    at org.attoparser.HtmlElement.handleOpenElementEnd(HtmlElement.java:109)
    at org.attoparser.HtmlMarkupHandler.handleOpenElementEnd(HtmlMarkupHandler.java:297)
    at org.attoparser.MarkupEventProcessorHandler.handleOpenElementEnd(MarkupEventProcessorHandler.java:402)
    at org.attoparser.ParsingElementMarkupUtil.parseOpenElement(ParsingElementMarkupUtil.java:159)
    at org.attoparser.MarkupParser.parseBuffer(MarkupParser.java:710)
    at org.attoparser.MarkupParser.parseDocument(MarkupParser.java:301)
    ... 50 more


Advertise management page:

<!DOCTYPE html>
<html lang="pt-br"  xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="style/dashboard.css">
    <link rel="stylesheet" href="style/global-style.css">
    <script src="https://kit.fontawesome.com/fe8dd15147.js" crossorigin="anonymous" defer></script>
    <script src="script/script.js" defer></script>
    <script src="script/aaa.js" defer></script>
    <link rel="preconnect" href="https://fonts.googleapis.com">
    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
    <link href="https://fonts.googleapis.com/css2?family=Coda&display=swap" rel="stylesheet">


</head>
<body>
    <!-- NAVBAR  -->
    <header class="cabecalho">
        <div class="navBar-container">
            <nav class="navBar">
                <h1>Logo</h1>
                <ul>
                    <li>Home</li>
                    <li>Imóveis</li>
                    <li>Sobre Nós</li>
                    <li>Suporte</li>
                </ul>
                <div class="login-singin">
                    <div class="button">CADASTRO</div>
                    <div class="button invert-button"><img src="icons/perfil.svg"> LOGIN</div>
                </div>
                <button class="menu" onclick="">
                    <img src="icons/Menu.svg">
                </button>
            </nav>
        </div>
        
        <div class="cabecalho-meus-imoveis">
            <a href="#"><i class="fas fa-angle-double-left"></i> Voltar a Meus Imoveis</a>
            <h2>Endereço do Negócio</h2>
        </div>
        </header>
<main>
<!-- CRIAR ANUNCIO  -->
<div class="servicos-dashboard">
    <div class="preco-dashboard">
       <input type="number" class="preco-dashboard" placeholder="R$ 999999.99999">
       <a th:href="@{dashboard}"><i class="fas fa-pen"></i>CRIAR PUBLICAÇÃO</a>
    </div>
</div>
</section>
</main>
</body>
</html>


Dashboard page:

<!DOCTYPE html>
<html lang="pt-br"  xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="style/dashboard.css">
    <link rel="stylesheet" href="style/global-style.css">
    <script src="https://kit.fontawesome.com/fe8dd15147.js" crossorigin="anonymous" defer></script>
    <script src="script/script.js" defer></script>
    <script src="script/aaa.js" defer></script>
    <link rel="preconnect" href="https://fonts.googleapis.com">
    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
    <link href="https://fonts.googleapis.com/css2?family=Coda&display=swap" rel="stylesheet">
</head>
<body>
    <!-- NAVBAR  -->
    <header class="cabecalho">
        <div class="navBar-container">
            <nav class="navBar">
                <h1>Logo</h1>
                <ul>
                    <li>Home</li>
                    <li>Imóveis</li>
                    <li>Sobre Nós</li>
                    <li>Suporte</li>
                </ul>
                <div class="login-singin">
                    <div class="button">CADASTRO</div>
                    <div class="button invert-button"><img src="icons/perfil.svg"> LOGIN</div>
                </div>
                <button class="menu" onclick="">
                    <img src="icons/Menu.svg">
                </button>
            </nav>
        </div>
        
        <div class="cabecalho-meus-imoveis">
            <a href="#"><i class="fas fa-angle-double-left"></i> Voltar a Meus Imoveis</a>
            <h2>Endereço do Negócio</h2>
        </div>
        </header>
<!--  -->


<main>
<section class="informacoes-servico">
    <div class="carrossel"> 
        
        <img src="assets/803_df899154-e3b9-4e5f-a1fb-6b23820b6011_thm.jpg" class="imagems-carrossel active "alt="">
        <img src="assets/96026334.jpg" class="imagems-carrossel" alt="">
        <img src="assets/maxresdefault.jpg" class="imagems-carrossel" alt="">
        <img src="assets/unnamed.jpg" class="imagems-carrossel" alt="">
        <img src="assets/Imagem1.png" class="imagems-carrossel" alt="">
      
        <button class="btn-carrossel"></button>
        <button class="btn-carrossel-1"></button>
        <div class="bolinhas" id="bolinha"></div>
    </div>
<!-- DESCRICAO DO IMOVEL  -->
<div class="servicos-dashboard">
    <div class="preco-dashboard">
      <input type="number" class="preco-dashboard" placeholder="R$ 9999.99">
      <a href="#"><i class="fas fa-pen"></i>EDITAR PUBLICAÇÃO</a>
      <a href="#"><i class="fas fa-pen"></i>EXCLUIR PUBLICAÇÃO</a>
    </div>
   
    <div class="descricao-dashboard">        
        <h2>DESCRIÇÃO</h2>
        <textarea rows="5" colls="33" placeholder="Insira sua descrição" maxlength="1000"  th:field="*"></textarea>
   </div>

    <div class="dados-imovel-dashboard">
        <h2>DADOS DO IMOVEL </h2>
        <div class="dados-imovel-dashboard-especificacoes">
            <div class="especificacoes-info">
                <span class="titulo-especificacao-dashboard">Cidade</span>
                <input class="conteudo-especificacao-dashboard" placeholder="Ex: Cidade" th:field="*"></input>
            </div>
            
            <div class="especificacoes-info">
                <span class="titulo-especificacao-dashboard">Bairro</span>
                <input class="conteudo-especificacao-dashboard"  placeholder="Ex: Osasco-Beach"></input>
            </div>
            
            <div class="especificacoes-info">
                <span class="titulo-especificacao-dashboard">Construido em</span>
                <input class="conteudo-especificacao-dashboard" placeholder="Ex: 2003" th:field="*"></input>
            </div>
            
            <div class="especificacoes-info">
                <span class="titulo-especificacao-dashboard">Vigilância</span>
                <input class="conteudo-especificacao-dashboard" placeholder="Ex: 24" th:field="*"></input>
            </div>
            
            <div class="especificacoes-info">
                <span class="titulo-especificacao-dashboard">Estacionamento</span>
                <input class="conteudo-especificacao-dashboard"placeholder="Sim" th:field="*"></input>
            </div>
            
            <div class="especificacoes-info">
                <span class="titulo-especificacao-dashboard">Tamanho m²</span>
                <input class="conteudo-especificacao-dashboard " placeholder="100m²" th:field="*"></input>
            </div>
            
            <div class="especificacoes-info">
                <span class="titulo-especificacao-dashboard">Banheiros</span>
                <input class="conteudo-especificacao-dashboard" placeholder="4" th:field="*"></input>
            </div>
            
            <!-- ALTERAR APÓS COMPONENTIZAÇÃO -->
            <div class="especificacoes-info">
                <span class="titulo-especificacao-dashboard">Preço por m²</span>
                <input class="conteudo-especificacao-dashboard" placeholder="R$ 300" th:field="*"></input>
            </div>
        </div>

</div>
</div>
</section>
</main>
</body>
</html>


Dashboard controller code:

package icarus.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.servlet.ModelAndView;

import icarus.model.Imoveis;

@Controller
public class DashboardController {

@GetMapping("/dashboard")
public ModelAndView InsertImovel(Imoveis imovel) {
    
    ModelAndView mv = new ModelAndView();
    mv.setViewName("/dashboard-locador");
    mv.addObject("imovel", new Imoveis());
    return mv;
}
    
}

(sorry for my poor english)

  • You are using `th:field` without a form. The value should normally also be a property name. Maybe have a look to https://www.wimdeblauwe.com/blog/2021/05/23/form-handling-with-thymeleaf/ for some more information on how to use forms in Thymeleaf. – Wim Deblauwe Dec 02 '21 at 11:30

1 Answers1

0

First of all, check to see if your template file path is correct.

mv.setViewName("/dashboard-locador");

Modify to

mv.setViewName("dashboard-locador")

And check to see if your template file exists in your resources\templates directory. Because the default template directory of thymeleaf is resources\templates.

Finally, check that the view parser is configured correctly

Refer to thymeleaf default configuration source code

@ConfigurationProperties(prefix = "spring.thymeleaf")
public class ThymeleafProperties {

    private static final Charset DEFAULT_ENCODING = StandardCharsets.UTF_8;

    public static final String DEFAULT_PREFIX = "classpath:/templates/";

    public static final String DEFAULT_SUFFIX = ".html";
}
Jilliss
  • 119
  • 7