Search code examples
thymeleaf

Do thymeleaf fragments need to exist inside a well-formed HTML file?


I'm creating a couple of thymeleaf fragments to use in other pages, and I was told they need to be inside a well-formed html page (with HTML, HEAD, BODY tags etc). Is this the case?

The fragments are only going to be used with th:include/th:replace in other places.


Solution

  • A fragment just needs to be a well formed html. You can start with a div

    For e.g

    <div th:fragment="formField (field, value, size)">
    <div>
        <label th:for="${#strings.toLowerCase(field)}"> <span
            th:text="${field}">Field</span>
        </label>
    </div>
    <div>
        <input type="text" th:id="${#strings.toLowerCase(field)}"
            th:name="${#strings.toLowerCase(field)}" th:value="${value}"
            th:size="${size}">
    </div>
    

    Which you then include somewhere else

    <body>
    <header th:insert="fragments/general.html :: header"> </header>
    <div th:replace="fragments/forms.html
      :: formField(field='Name', value='John Doe',size='40')">
    </div>
    <div th:replace="fragments/general.html :: footer"></div>
    

    I took these examples from here: https://www.baeldung.com/spring-thymeleaf-fragments