我正在尝试创建一个执行 ServletDispatcher.include 的 Thymeleaf 方言处理器。我扩展了 AbstractElementTagProcessor 并重写了 doProcess 方法。相关代码片段是:
@Override
protected void doProcess(final ITemplateContext context, final IProcessableElementTag tag, final IElementTagStructureHandler structureHandler) {
ServletContext servletContext = null; // TODO: get servlet context
HttpServletRequest request = null; // TODO: get request
HttpServletResponse response = null; // TODO: get response
// Retrieve dispatcher to component JSP view
RequestDispatcher dispatcher = servletContext.getRequestDispatcher("/something");
// Create wrapper (acts as response, but stores output in a CharArrayWriter)
CharResponseWrapper wrapper = new CharResponseWrapper(response);
// Run the include
dispatcher.include(request, wrapper);
String result = wrapper.toString();
// Create a model with the returned string
final IModelFactory modelFactory = context.getModelFactory();
final IModel model = modelFactory.parse(context.getTemplateData(), result);
// Instruct the engine to replace this entire element with the specified model
structureHandler.replaceWith(model, false);
我过去以自定义 JSP 标记的形式编写了类似的代码。问题是:我不知道如何访问 ServletContext、HttpServletRequest 和 HttpServletResponse!
这是否可以完成,或者我应该接受 Thymeleaf 太擅长隐藏 HTTP 上下文了?
您可以访问请求(通过使用#request
使您可以直接访问的对象javax.servlet.http.HttpServletRequest
对象)参数和会话(与#session
使您可以直接访问的对象javax.servlet.http.HttpSession
对象)属性直接在 Thymeleaf 视图中:
${#request.getAttribute('foo')}
${#request.getParameter('foo')}
${#request.getContextPath()}
${#request.getRequestName()}
<p th:if="${#request.getParameter('yourParameter') != null
th:text="${#request.getParameter('yourParameter')}"}">Request Param</p>
${#session.getAttribute('foo')}
${#session.id}
${#session.lastAccessedTime}
<p th:if="${session != null}"> th:text="${session.yourAttribute}"</p>
阅读更多here http://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf.html#expression-basic-objects.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)