java – 在Wicket 1.5中将页面渲染为字符串

我正在努力将现有的Wicket webapp升级到1.5,并且在我们用于呈现HTML电子邮件的renderPage函数中遇到了麻烦.

以前我们使用this StackOverflow questionthis (currently broken but maybe fixed later) link中引用/列出的代码,但该代码不再有效,因为很多这些类在1.5中不存在.

我也发现了这个电子邮件主题,但它对细节很清楚,我不知道如何从我的pageClass和参数创建WebPage.
http://apache-wicket.1842946.n4.nabble.com/Render-WebPage-to-String-in-Wicket-1-5-td3622130.html

这是我的代码

// Renders a page under a temporary request cycle in order to get the rendered markup
public static String renderPage(Class

具体来说,代码中断,因为WebRequestCycle和BookmarkablePageRequestTarget类不再存在.我觉得我应该能够使用StringResponse类一些如何,但我错过了可以帮助我触发该响应渲染的链接.

任何帮助,将不胜感激.谢谢.

我的最终解决方

使用我在下面的答案中指示的示例,我最终得到以下代码.我也在这里粘贴它,以便如果该链接消失或者使用未来版本的Wicket进行更改,那么未来的人们仍然可以获得他们需要的答案.

我最终传入了一个PageProvider,因为在某些情况下我需要传入一个实例化的Page,而在其他情况下我需要传递一个pageClass参数.

public static String renderPage(final PageProvider pageProvider)
{
    final RenderPageRequestHandler handler = new RenderPageRequestHandler(pageProvider,RedirectPolicy.NEVER_REDIRECT);

    final PageRenderer pageRenderer = Application.get().getPageRendererProvider().get(handler);

    RequestCycle requestCycle = RequestCycle.get();

    final Response oldResponse = requestCycle.getResponse();
    BufferedWebResponse tempResponse = new BufferedWebResponse(null);

    try
    {
        requestCycle.setResponse(tempResponse);
        pageRenderer.respond(requestCycle);
    }
    finally
    {
        requestCycle.setResponse(oldResponse);
    }

    return tempResponse.getText().toString();
}
最佳答案

相关文章

ArrayList简介:ArrayList 的底层是数组队列,相当于动态数组。与 Java 中的数组相比,它的容量能动态增...
一、进程与线程 进程:是代码在数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位。 线程...
本文为博客园作者所写: 一寸HUI,个人博客地址:https://www.cnblogs.com/zsql/ 简单的一个类...
#############java面向对象详解#############1、面向对象基本概念2、类与对象3、类和对象的定义格式4、...
一、什么是异常? 异常就是有异于常态,和正常情况不一样,有错误出错。在java中,阻止当前方法或作用域...
Collection接口 Collection接口 Collection接口 Collection是最基本的集合接口,一个Collection代表一组...