我们正在使用Spring 3和Apache Tiles来创建在Tomcat 7上运行的Web应用程序。
是否有可能在运行期间使用这些工具从java代码中的JSP文件手动生成HTML?
例如,我有sample.jsp
根据传递的模型的内容生成一些动态生成的内容。我想在JSP对象中存储JSP中呈现的HTML。
在非常高的抽象层次上:
String renderedHtml=renderHtmlFromJSP(jspName,model);
如果没有,是否可以动态更改Tiles元素的定义?例如
<put-attribute name="headerRight" value="dynamically_set_value" />
答案 0 :(得分:1)
这个问题可以与这个问题结合起来:Execute and render JSP inside a Filter
因此,您的renderHtmlFromJSP
可能如下所示:
String renderHtmlFromJSP(
String fileName,
???? dataModel,
HttpServletRequest sourceRequest){
//you need emulate response to produce output in string (see bellow)
MyStringResponse resp = new MyStringResponse();
sourceRequest
.getRequestDispatcher("/WEB-INF/header.jsp")
.include(request, resp);
resp.flushBuffer();
return resp.getMyInternalBufferContent();
}
要实现MyStringResponse,请使用HttpServletResponseWrapper覆盖方法getOutputStream()并返回ByteArrayOutputStream的实例