首先,是否可以在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"
答案 0 :(得分:0)
关于您最初的问题,是否可以在Servlet机制中使用百里香叶,答案是肯定的。请检查example和detailed 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());
}
}