2
我试图创建一个Thymeleaf方言处理器,它执行ServletDispatcher.include。我扩展了AbstractElementTagProcessor并重写了doProcess方法。相关的代码片段是:在Thymeleaf方言处理器中访问HttpServletRequest和HttpServletResponse
@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上下文?
谢谢,DimaSan。我意识到这一点,但我想从写这些观点的人中抽象出所有这些。他们应该能够使用我的方言,像这样: –
Quirijn
我明白了,那么也许这篇文章将对你有用:[延伸Thymeleaf](http://www.thymeleaf.org/doc/tutorials/3.0/extendingthymeleaf .PDF)。看看第3.4章。我们头条的元素处理器**。 – DimaSan
谢谢。阅读完这篇文章后,我仍然没有看到如何从处理器中访问当前请求,servlet上下文和/或响应。我想这根本不可能。我会寻找替代解决方案。 – Quirijn