gpt4 book ai didi

java - 在 Wicket 1.5 中将页面呈现为字符串

转载 作者:搜寻专家 更新时间:2023-10-31 20:14:50 25 4
gpt4 key购买 nike

我正在努力将我们现有的 Wicket webapp 升级到 1.5,但在我们用来呈现 HTML 电子邮件的 renderPage 函数中遇到了障碍。

之前我们使用了在 this StackOverflow question 中引用/列出的代码和 this (currently broken but maybe fixed later) link但是该代码不再有效,因为很多类在 1.5 中不存在。

我也找到了这个电子邮件线程,但它没有详细说明,我不知道如何从我的 pageClass 和参数创建网页。 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<? extends Page> pageClass, PageParameters pageParameters)
{
//get the servlet context
WebApplication application = (WebApplication) WebApplication.get();

ServletContext context = application.getServletContext();

//fake a request/response cycle
MockHttpSession servletSession = new MockHttpSession(context);
servletSession.setTemporary(true);

MockHttpServletRequest servletRequest = new MockHttpServletRequest(application, servletSession, context);

MockHttpServletResponse servletResponse = new MockHttpServletResponse(servletRequest);

//initialize request and response
servletRequest.initialize();
servletResponse.initialize();

WebRequest webRequest = new ServletWebRequest(servletRequest);

BufferedWebResponse webResponse = new BufferedWebResponse(servletResponse);
webResponse.setAjax(true);

WebRequestCycle requestCycle = new WebRequestCycle(application, webRequest, webResponse);
requestCycle.setRequestTarget(new BookmarkablePageRequestTarget(pageClass, pageParameters));

try
{
requestCycle.getProcessor().respond(requestCycle);

if (requestCycle.wasHandled() == false)
{
requestCycle.setRequestTarget(new WebErrorCodeResponseTarget(HttpServletResponse.SC_NOT_FOUND));
}
}
finally
{
requestCycle.detach();
requestCycle.getResponse().close();
}

return webResponse.toString();
}

具体来说,代码中断是因为 WebRequestCycle 和 BookmarkablePageRequestTarget 类不再存在。我觉得我应该能够以某种方式使用 StringResponse 类,但我缺少可以帮助我触发该响应呈现的链接。

如有任何帮助,我们将不胜感激。谢谢。

我的最终解决方案

使用下面的答案指向的示例,我得到了以下代码。我也将它粘贴在这里,这样如果该链接消失或被 Wicket 的 future 版本更改,那么 future 的人们仍然能够获得他们需要的答案。

我最终传入了一个 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();
}

最佳答案

关于java - 在 Wicket 1.5 中将页面呈现为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9829898/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com