How can I solve the problem with my multiple layouts in Thymleaf?












0















I m getting an error when i want to introduce another fragment from one layout page that contains to fragments. The one is for the header and the other for a post form. When i include just the first one I m getting a problem but if I add the other one i m getting two errors.



The first one is:



Error during execution of processor 'org.thymeleaf.spring4.processor.SpringInputGeneralFieldTagProcessor' (template: "fragments/header" - line 38, col 26)


The second one is



` ERROR 13400 --- [nio-8080-exec-1] o.a.c.c.C.[.[.[.[dispatcherServlet]      
: Servlet.service() for servlet [dispatcherServlet] in context with path
[/api] threw exception [Request processing failed; nested exception is
org.thymeleaf.exceptions.TemplateProcessingException: Error during execution
of processor
'org.thymeleaf.spring4.processor.SpringInputGeneralFieldTagProcessor'
(template: "fragments/header" - line 38, col 26)] with root cause

java.lang.IllegalStateException: Neither BindingResult nor plain target
object for bean name 'tweet' available as request attribute`


The first fragment is a navigation bar and the second is post form. I was using thymleaf and spring boot.



The header.html is:



<!DOCTYPE html >
<html xmlns:th="http://www.thymeleaf.org">
<head>
...
</head>
<body>
<div class="navbar navbar-inverse navbar-fixed-top" th:fragment="header">
<div class="container">
<div class="navbar-header">
<a class="navbar-brand" href="#"><strong>Twitter</strong></a>
</div>
<div class="navbar-collapse collapse">
<ul class="nav navbar-nav">
<li th:classappend="${module == 'home' ? 'active' : ''}">
<a href="#" th:href="@{/}">My tweets</a>
</li>
<li th:classappend="${module == 'tasks' ? 'active' : ''}">
<a href="#" th:href="@{/new}">Create a User</a>
</li>
<li th:classappend="${module == 'tasks' ? 'active' : ''}">
<a href="#" th:href="@{/tweets}">Tweets</a>
</li>
<li th:classappend="${module == 'tasks' ? 'active' : ''}">
<a href="#" th:href="@{/all}">Display all Users</a>
</li>
<li th:classappend="${module == 'tasks' ? 'active' : ''}">
<a href="#" th:href="@{/overview}">Profile overview</a>
</li>
</ul>
</div>
</div>
</div>
<div th:fragment="post">
<!--/*@thymesVar id="tweet"
type="com.javalanguagezone.interviewtwitter.domain.Tweet"*/-->
<form th:action="@{/tweets/}" th:object="${tweet}" method="post">
<div class="form-group">
<input type="text" th:field="*{content}" placeholder="What's happening?
Tell us!">+
<input type="submit" value="Submit" />
</div>
</form>
</div>
</body>
</html>


The html file where i m calling the layout fragments looks like this:



    <!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8">
<title>User overview</title>
</head>
<body>
<div th:replace="fragments/header :: header"></div>
<div th:replace="fragments/header :: post"></div>

<div class="container-fluid" style="margin-top: 80px">
<div class="row">
<div class="col-md-12">
<div class="panel panel-primary">

<div class="panel-heading">
<h1 class="panel-title">User profile overview</h1>
</div>
<div class="panel-body">
<div class="table-responsive" th:if="${tweets}!=null">
<table class="table table-hover">
<thead>
<tr>
<th>Id</th>
<th>Name</th>
<th>Number of tweets</th>
<th>Number of followers</th>
<th>Number of users following</th>
</tr>
</thead>
<tbody>
<tr>
<td th:text="${user.id}"></td>
<td th:text="${user.getUsername()}"></td>
<td th:text="${tweets}">1</td>
<td th:text="${followers}">Hamdo</td>
<td th:text="${following} "><br/>

</td>
</span>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
</div>
</body></html>


The controller looks like this:



 @PostMapping("/")
@ResponseStatus(CREATED)
public String tweet(@ModelAttribute("tweet") @Valid @RequestBody String
tweet, Principal principal, BindingResult result) {
if(result.hasErrors()){
return "error";
}
tweetService.createTweet(tweet, principal);

return "index";
}


Thanks you with the help in advance and i m newbie with Thymleaf.










share|improve this question





























    0















    I m getting an error when i want to introduce another fragment from one layout page that contains to fragments. The one is for the header and the other for a post form. When i include just the first one I m getting a problem but if I add the other one i m getting two errors.



    The first one is:



    Error during execution of processor 'org.thymeleaf.spring4.processor.SpringInputGeneralFieldTagProcessor' (template: "fragments/header" - line 38, col 26)


    The second one is



    ` ERROR 13400 --- [nio-8080-exec-1] o.a.c.c.C.[.[.[.[dispatcherServlet]      
    : Servlet.service() for servlet [dispatcherServlet] in context with path
    [/api] threw exception [Request processing failed; nested exception is
    org.thymeleaf.exceptions.TemplateProcessingException: Error during execution
    of processor
    'org.thymeleaf.spring4.processor.SpringInputGeneralFieldTagProcessor'
    (template: "fragments/header" - line 38, col 26)] with root cause

    java.lang.IllegalStateException: Neither BindingResult nor plain target
    object for bean name 'tweet' available as request attribute`


    The first fragment is a navigation bar and the second is post form. I was using thymleaf and spring boot.



    The header.html is:



    <!DOCTYPE html >
    <html xmlns:th="http://www.thymeleaf.org">
    <head>
    ...
    </head>
    <body>
    <div class="navbar navbar-inverse navbar-fixed-top" th:fragment="header">
    <div class="container">
    <div class="navbar-header">
    <a class="navbar-brand" href="#"><strong>Twitter</strong></a>
    </div>
    <div class="navbar-collapse collapse">
    <ul class="nav navbar-nav">
    <li th:classappend="${module == 'home' ? 'active' : ''}">
    <a href="#" th:href="@{/}">My tweets</a>
    </li>
    <li th:classappend="${module == 'tasks' ? 'active' : ''}">
    <a href="#" th:href="@{/new}">Create a User</a>
    </li>
    <li th:classappend="${module == 'tasks' ? 'active' : ''}">
    <a href="#" th:href="@{/tweets}">Tweets</a>
    </li>
    <li th:classappend="${module == 'tasks' ? 'active' : ''}">
    <a href="#" th:href="@{/all}">Display all Users</a>
    </li>
    <li th:classappend="${module == 'tasks' ? 'active' : ''}">
    <a href="#" th:href="@{/overview}">Profile overview</a>
    </li>
    </ul>
    </div>
    </div>
    </div>
    <div th:fragment="post">
    <!--/*@thymesVar id="tweet"
    type="com.javalanguagezone.interviewtwitter.domain.Tweet"*/-->
    <form th:action="@{/tweets/}" th:object="${tweet}" method="post">
    <div class="form-group">
    <input type="text" th:field="*{content}" placeholder="What's happening?
    Tell us!">+
    <input type="submit" value="Submit" />
    </div>
    </form>
    </div>
    </body>
    </html>


    The html file where i m calling the layout fragments looks like this:



        <!DOCTYPE html>
    <html lang="en" xmlns:th="http://www.thymeleaf.org">
    <head><meta charset="UTF-8">
    <title>User overview</title>
    </head>
    <body>
    <div th:replace="fragments/header :: header"></div>
    <div th:replace="fragments/header :: post"></div>

    <div class="container-fluid" style="margin-top: 80px">
    <div class="row">
    <div class="col-md-12">
    <div class="panel panel-primary">

    <div class="panel-heading">
    <h1 class="panel-title">User profile overview</h1>
    </div>
    <div class="panel-body">
    <div class="table-responsive" th:if="${tweets}!=null">
    <table class="table table-hover">
    <thead>
    <tr>
    <th>Id</th>
    <th>Name</th>
    <th>Number of tweets</th>
    <th>Number of followers</th>
    <th>Number of users following</th>
    </tr>
    </thead>
    <tbody>
    <tr>
    <td th:text="${user.id}"></td>
    <td th:text="${user.getUsername()}"></td>
    <td th:text="${tweets}">1</td>
    <td th:text="${followers}">Hamdo</td>
    <td th:text="${following} "><br/>

    </td>
    </span>
    </tr>
    </tbody>
    </table>
    </div>
    </div>
    </div>
    </div>
    </div>
    </div>
    </body></html>


    The controller looks like this:



     @PostMapping("/")
    @ResponseStatus(CREATED)
    public String tweet(@ModelAttribute("tweet") @Valid @RequestBody String
    tweet, Principal principal, BindingResult result) {
    if(result.hasErrors()){
    return "error";
    }
    tweetService.createTweet(tweet, principal);

    return "index";
    }


    Thanks you with the help in advance and i m newbie with Thymleaf.










    share|improve this question



























      0












      0








      0








      I m getting an error when i want to introduce another fragment from one layout page that contains to fragments. The one is for the header and the other for a post form. When i include just the first one I m getting a problem but if I add the other one i m getting two errors.



      The first one is:



      Error during execution of processor 'org.thymeleaf.spring4.processor.SpringInputGeneralFieldTagProcessor' (template: "fragments/header" - line 38, col 26)


      The second one is



      ` ERROR 13400 --- [nio-8080-exec-1] o.a.c.c.C.[.[.[.[dispatcherServlet]      
      : Servlet.service() for servlet [dispatcherServlet] in context with path
      [/api] threw exception [Request processing failed; nested exception is
      org.thymeleaf.exceptions.TemplateProcessingException: Error during execution
      of processor
      'org.thymeleaf.spring4.processor.SpringInputGeneralFieldTagProcessor'
      (template: "fragments/header" - line 38, col 26)] with root cause

      java.lang.IllegalStateException: Neither BindingResult nor plain target
      object for bean name 'tweet' available as request attribute`


      The first fragment is a navigation bar and the second is post form. I was using thymleaf and spring boot.



      The header.html is:



      <!DOCTYPE html >
      <html xmlns:th="http://www.thymeleaf.org">
      <head>
      ...
      </head>
      <body>
      <div class="navbar navbar-inverse navbar-fixed-top" th:fragment="header">
      <div class="container">
      <div class="navbar-header">
      <a class="navbar-brand" href="#"><strong>Twitter</strong></a>
      </div>
      <div class="navbar-collapse collapse">
      <ul class="nav navbar-nav">
      <li th:classappend="${module == 'home' ? 'active' : ''}">
      <a href="#" th:href="@{/}">My tweets</a>
      </li>
      <li th:classappend="${module == 'tasks' ? 'active' : ''}">
      <a href="#" th:href="@{/new}">Create a User</a>
      </li>
      <li th:classappend="${module == 'tasks' ? 'active' : ''}">
      <a href="#" th:href="@{/tweets}">Tweets</a>
      </li>
      <li th:classappend="${module == 'tasks' ? 'active' : ''}">
      <a href="#" th:href="@{/all}">Display all Users</a>
      </li>
      <li th:classappend="${module == 'tasks' ? 'active' : ''}">
      <a href="#" th:href="@{/overview}">Profile overview</a>
      </li>
      </ul>
      </div>
      </div>
      </div>
      <div th:fragment="post">
      <!--/*@thymesVar id="tweet"
      type="com.javalanguagezone.interviewtwitter.domain.Tweet"*/-->
      <form th:action="@{/tweets/}" th:object="${tweet}" method="post">
      <div class="form-group">
      <input type="text" th:field="*{content}" placeholder="What's happening?
      Tell us!">+
      <input type="submit" value="Submit" />
      </div>
      </form>
      </div>
      </body>
      </html>


      The html file where i m calling the layout fragments looks like this:



          <!DOCTYPE html>
      <html lang="en" xmlns:th="http://www.thymeleaf.org">
      <head><meta charset="UTF-8">
      <title>User overview</title>
      </head>
      <body>
      <div th:replace="fragments/header :: header"></div>
      <div th:replace="fragments/header :: post"></div>

      <div class="container-fluid" style="margin-top: 80px">
      <div class="row">
      <div class="col-md-12">
      <div class="panel panel-primary">

      <div class="panel-heading">
      <h1 class="panel-title">User profile overview</h1>
      </div>
      <div class="panel-body">
      <div class="table-responsive" th:if="${tweets}!=null">
      <table class="table table-hover">
      <thead>
      <tr>
      <th>Id</th>
      <th>Name</th>
      <th>Number of tweets</th>
      <th>Number of followers</th>
      <th>Number of users following</th>
      </tr>
      </thead>
      <tbody>
      <tr>
      <td th:text="${user.id}"></td>
      <td th:text="${user.getUsername()}"></td>
      <td th:text="${tweets}">1</td>
      <td th:text="${followers}">Hamdo</td>
      <td th:text="${following} "><br/>

      </td>
      </span>
      </tr>
      </tbody>
      </table>
      </div>
      </div>
      </div>
      </div>
      </div>
      </div>
      </body></html>


      The controller looks like this:



       @PostMapping("/")
      @ResponseStatus(CREATED)
      public String tweet(@ModelAttribute("tweet") @Valid @RequestBody String
      tweet, Principal principal, BindingResult result) {
      if(result.hasErrors()){
      return "error";
      }
      tweetService.createTweet(tweet, principal);

      return "index";
      }


      Thanks you with the help in advance and i m newbie with Thymleaf.










      share|improve this question
















      I m getting an error when i want to introduce another fragment from one layout page that contains to fragments. The one is for the header and the other for a post form. When i include just the first one I m getting a problem but if I add the other one i m getting two errors.



      The first one is:



      Error during execution of processor 'org.thymeleaf.spring4.processor.SpringInputGeneralFieldTagProcessor' (template: "fragments/header" - line 38, col 26)


      The second one is



      ` ERROR 13400 --- [nio-8080-exec-1] o.a.c.c.C.[.[.[.[dispatcherServlet]      
      : Servlet.service() for servlet [dispatcherServlet] in context with path
      [/api] threw exception [Request processing failed; nested exception is
      org.thymeleaf.exceptions.TemplateProcessingException: Error during execution
      of processor
      'org.thymeleaf.spring4.processor.SpringInputGeneralFieldTagProcessor'
      (template: "fragments/header" - line 38, col 26)] with root cause

      java.lang.IllegalStateException: Neither BindingResult nor plain target
      object for bean name 'tweet' available as request attribute`


      The first fragment is a navigation bar and the second is post form. I was using thymleaf and spring boot.



      The header.html is:



      <!DOCTYPE html >
      <html xmlns:th="http://www.thymeleaf.org">
      <head>
      ...
      </head>
      <body>
      <div class="navbar navbar-inverse navbar-fixed-top" th:fragment="header">
      <div class="container">
      <div class="navbar-header">
      <a class="navbar-brand" href="#"><strong>Twitter</strong></a>
      </div>
      <div class="navbar-collapse collapse">
      <ul class="nav navbar-nav">
      <li th:classappend="${module == 'home' ? 'active' : ''}">
      <a href="#" th:href="@{/}">My tweets</a>
      </li>
      <li th:classappend="${module == 'tasks' ? 'active' : ''}">
      <a href="#" th:href="@{/new}">Create a User</a>
      </li>
      <li th:classappend="${module == 'tasks' ? 'active' : ''}">
      <a href="#" th:href="@{/tweets}">Tweets</a>
      </li>
      <li th:classappend="${module == 'tasks' ? 'active' : ''}">
      <a href="#" th:href="@{/all}">Display all Users</a>
      </li>
      <li th:classappend="${module == 'tasks' ? 'active' : ''}">
      <a href="#" th:href="@{/overview}">Profile overview</a>
      </li>
      </ul>
      </div>
      </div>
      </div>
      <div th:fragment="post">
      <!--/*@thymesVar id="tweet"
      type="com.javalanguagezone.interviewtwitter.domain.Tweet"*/-->
      <form th:action="@{/tweets/}" th:object="${tweet}" method="post">
      <div class="form-group">
      <input type="text" th:field="*{content}" placeholder="What's happening?
      Tell us!">+
      <input type="submit" value="Submit" />
      </div>
      </form>
      </div>
      </body>
      </html>


      The html file where i m calling the layout fragments looks like this:



          <!DOCTYPE html>
      <html lang="en" xmlns:th="http://www.thymeleaf.org">
      <head><meta charset="UTF-8">
      <title>User overview</title>
      </head>
      <body>
      <div th:replace="fragments/header :: header"></div>
      <div th:replace="fragments/header :: post"></div>

      <div class="container-fluid" style="margin-top: 80px">
      <div class="row">
      <div class="col-md-12">
      <div class="panel panel-primary">

      <div class="panel-heading">
      <h1 class="panel-title">User profile overview</h1>
      </div>
      <div class="panel-body">
      <div class="table-responsive" th:if="${tweets}!=null">
      <table class="table table-hover">
      <thead>
      <tr>
      <th>Id</th>
      <th>Name</th>
      <th>Number of tweets</th>
      <th>Number of followers</th>
      <th>Number of users following</th>
      </tr>
      </thead>
      <tbody>
      <tr>
      <td th:text="${user.id}"></td>
      <td th:text="${user.getUsername()}"></td>
      <td th:text="${tweets}">1</td>
      <td th:text="${followers}">Hamdo</td>
      <td th:text="${following} "><br/>

      </td>
      </span>
      </tr>
      </tbody>
      </table>
      </div>
      </div>
      </div>
      </div>
      </div>
      </div>
      </body></html>


      The controller looks like this:



       @PostMapping("/")
      @ResponseStatus(CREATED)
      public String tweet(@ModelAttribute("tweet") @Valid @RequestBody String
      tweet, Principal principal, BindingResult result) {
      if(result.hasErrors()){
      return "error";
      }
      tweetService.createTweet(tweet, principal);

      return "index";
      }


      Thanks you with the help in advance and i m newbie with Thymleaf.







      java html spring spring-boot thymeleaf






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Nov 16 '18 at 6:50









      Alain Cruz

      2,1003920




      2,1003920










      asked Nov 15 '18 at 13:10









      Jasmin Jasko MerušićJasmin Jasko Merušić

      657




      657
























          1 Answer
          1






          active

          oldest

          votes


















          0














          You can try passing down the tweet object as variable to your fragment with the following code.



          <div th:replace="fragments/header :: post" th:with="tweetFrag = ${tweet}"></div>


          Then, just use the new variable.



          <form th:action="@{/tweets/}" th:object="${tweetFrag}" method="post">
          <div class="form-group">
          <input type="text" th:field="*{content}" placeholder="What's happening? Tell us!">+
          <input type="submit" value="Submit" />
          </div>
          </form>





          share|improve this answer























            Your Answer






            StackExchange.ifUsing("editor", function () {
            StackExchange.using("externalEditor", function () {
            StackExchange.using("snippets", function () {
            StackExchange.snippets.init();
            });
            });
            }, "code-snippets");

            StackExchange.ready(function() {
            var channelOptions = {
            tags: "".split(" "),
            id: "1"
            };
            initTagRenderer("".split(" "), "".split(" "), channelOptions);

            StackExchange.using("externalEditor", function() {
            // Have to fire editor after snippets, if snippets enabled
            if (StackExchange.settings.snippets.snippetsEnabled) {
            StackExchange.using("snippets", function() {
            createEditor();
            });
            }
            else {
            createEditor();
            }
            });

            function createEditor() {
            StackExchange.prepareEditor({
            heartbeatType: 'answer',
            autoActivateHeartbeat: false,
            convertImagesToLinks: true,
            noModals: true,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: 10,
            bindNavPrevention: true,
            postfix: "",
            imageUploader: {
            brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
            contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
            allowUrls: true
            },
            onDemand: true,
            discardSelector: ".discard-answer"
            ,immediatelyShowMarkdownHelp:true
            });


            }
            });














            draft saved

            draft discarded


















            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53320255%2fhow-can-i-solve-the-problem-with-my-multiple-layouts-in-thymleaf%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown

























            1 Answer
            1






            active

            oldest

            votes








            1 Answer
            1






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes









            0














            You can try passing down the tweet object as variable to your fragment with the following code.



            <div th:replace="fragments/header :: post" th:with="tweetFrag = ${tweet}"></div>


            Then, just use the new variable.



            <form th:action="@{/tweets/}" th:object="${tweetFrag}" method="post">
            <div class="form-group">
            <input type="text" th:field="*{content}" placeholder="What's happening? Tell us!">+
            <input type="submit" value="Submit" />
            </div>
            </form>





            share|improve this answer




























              0














              You can try passing down the tweet object as variable to your fragment with the following code.



              <div th:replace="fragments/header :: post" th:with="tweetFrag = ${tweet}"></div>


              Then, just use the new variable.



              <form th:action="@{/tweets/}" th:object="${tweetFrag}" method="post">
              <div class="form-group">
              <input type="text" th:field="*{content}" placeholder="What's happening? Tell us!">+
              <input type="submit" value="Submit" />
              </div>
              </form>





              share|improve this answer


























                0












                0








                0







                You can try passing down the tweet object as variable to your fragment with the following code.



                <div th:replace="fragments/header :: post" th:with="tweetFrag = ${tweet}"></div>


                Then, just use the new variable.



                <form th:action="@{/tweets/}" th:object="${tweetFrag}" method="post">
                <div class="form-group">
                <input type="text" th:field="*{content}" placeholder="What's happening? Tell us!">+
                <input type="submit" value="Submit" />
                </div>
                </form>





                share|improve this answer













                You can try passing down the tweet object as variable to your fragment with the following code.



                <div th:replace="fragments/header :: post" th:with="tweetFrag = ${tweet}"></div>


                Then, just use the new variable.



                <form th:action="@{/tweets/}" th:object="${tweetFrag}" method="post">
                <div class="form-group">
                <input type="text" th:field="*{content}" placeholder="What's happening? Tell us!">+
                <input type="submit" value="Submit" />
                </div>
                </form>






                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered Nov 15 '18 at 20:26









                Alain CruzAlain Cruz

                2,1003920




                2,1003920
































                    draft saved

                    draft discarded




















































                    Thanks for contributing an answer to Stack Overflow!


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid



                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.


                    To learn more, see our tips on writing great answers.




                    draft saved


                    draft discarded














                    StackExchange.ready(
                    function () {
                    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53320255%2fhow-can-i-solve-the-problem-with-my-multiple-layouts-in-thymleaf%23new-answer', 'question_page');
                    }
                    );

                    Post as a guest















                    Required, but never shown





















































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown

































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown







                    Popular posts from this blog

                    Florida Star v. B. J. F.

                    Danny Elfman

                    Lugert, Oklahoma