Невозможно получить доступ ни к атрибуту запроса, ни к параметру с помощью Thymeleaf в приложении Servlet - PullRequest
0 голосов
/ 30 января 2019

Прежде всего, возможно ли вообще использовать шаблонизатор Thymeleaf в приложении сервлета?Если нет, какой еще механизм шаблонов я могу использовать вместо JSP?

Если это возможно, вот моя проблема: я не могу получить доступ ни к атрибуту запроса, ни к параметру через th:text.Ошибка: can't resolve 'name_of_attr/param'.

Теперь к деталям.

Я создал очень простое приложение с сервлетами с одним сервлетом и одной HTML-страницей.Когда я запускаю приложение, мой HomeServlet добавляет атрибут к запросу.Затем сервлет с помощью RequestDispatcher перенаправляет мой запрос на страницу home.html.Как вы можете видеть из кода ниже, я добавил ?test=param к ссылке, так что теперь у нас также есть параметр.

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    req.setAttribute("test", "test attribute");
    req.getRequestDispatcher("/home.html?test=param").forward(req, resp);
}

Теперь, в home.html я пытаюсь получить доступ к этим атрибутам иПараметр с использованием th:text.

<body>
    <h1>Test</h1>
    <div th:text="${test}">...</div>
    <div th:text="${param.test}">...</div>
</body>

Ничего не работает, и я получаю ошибку, упомянутую вверху.Может быть, я должен использовать какой-то другой тег Thymeleaf ... Пожалуйста, помогите мне:)

PS Я добавил зависимость тимелиста к своему pom.xml:

<dependency>
  <groupId>org.thymeleaf</groupId>
  <artifactId>thymeleaf</artifactId>
  <version>3.0.11.RELEASE</version>
</dependency>

Также я добавил следующую строкуна мою home.html страницу: xmlns:th="http://www.thymeleaf.org"

1 Ответ

0 голосов
/ 30 января 2019

Относительно вашего первоначального вопроса, возможно ли использовать тимелист в механизме сервлета, ответ - да.Пожалуйста, проверьте этот пример и подробный пример , которые оба являются хорошими отправными точками для использования сервлета тимелина.

Как видно из примеров, вы должны установить переменные в WebContext.следующим образом:

package test;

import com.thymeleafexamples.thymeleaf3.config.TemplateEngineUtil;
import java.io.IOException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.WebContext;

@WebServlet("/")
public class IndexServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
        TemplateEngine engine = TemplateEngineUtil.getTemplateEngine(request.getServletContext());
        WebContext context = new WebContext(request, response, request.getServletContext());
        context.setVariable("test", "test attribute");
        engine.process("home.html", context, response.getWriter());
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...