无法在Servlet应用中使用Thymeleaf访问请求属性或参数

时间:2019-01-30 17:49:32

标签: java servlets thymeleaf

首先,是否可以在servlet应用程序中使用Thymeleaf模板引擎?如果没有,我还可以使用什么模板引擎代替JSP?

如果可能,这是我的问题: 我无法通过th:text访问请求属性或参数。错误:can't resolve 'name_of_attr/param'

详细信息。

我创建了一个非常简单的servlet应用程序,其中包含一个servlet和一个HTML页面。 启动应用程序时,我的HomeServlet将属性添加到请求中。然后,使用RequestDispatcher的servlet将我的请求转发到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标签...请帮帮我:)

P.S。我在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 :(得分:0)

关于您最初的问题,是否可以在Servlet机制中使用百里香叶,答案是肯定的。请检查exampledetailed example这两个都是百里香servlet使用的良好起点。

从示例中可以看到,应该在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());
    }

}