Closed uklance closed 11 years ago
The solution ended up being:
final StringBuilder buffer = new StringBuilder();
String pageName = componentResources.getPageName();
Page page = pageSource.getPage(pageName);
pageRenderQueue.setRenderingPage(page);
pageRenderQueue.addPartialMarkupRendererFilter(new PartialMarkupRendererFilter() {
public void renderMarkup(MarkupWriter writer, JSONObject reply, PartialMarkupRenderer renderer) {
Element root = writer.element("partial");
renderer.renderMarkup(writer, reply);
writer.end();
buffer.append(root.getChildMarkup().trim());
}
});
pageRenderQueue.addPartialRenderer(renderCommand);
MarkupWriter markupWriter = markupWriterFactory.newMarkupWriter(new ContentType("text/xml"));
partialMarkupRenderer.renderMarkup(markupWriter, new JSONObject());
return buffer.toString();
This still uses some internal services but at least there are no Impls.
Internals:
import org.apache.tapestry5.internal.services.PageRenderQueue;
import org.apache.tapestry5.internal.services.PageSource;
import org.apache.tapestry5.internal.structure.Page;
Currently the component is using the internal RenderQueueImpl class and also HeartBeatImpl. I think it should use PartialMarkupRenderer or PageRenderQueue or maybe MarkupRenderer.