【问题标题】:Returning String instead of rendering page in wicket返回字符串而不是在检票口中呈现页面
【发布时间】:2014-02-22 13:14:06
【问题描述】:

我的 Java 应用程序似乎遇到了问题。

所以我有这个 wicket 网络应用程序,其中我有一个应用程序类,它有一些已安装的 url。我在这些网址之一中也有一个小程序。问题是,当我加载小程序并期望字符串返回到小程序时,此小程序将向我发送到小程序参数中指定的 url 的 post 请求。所以基本上它希望安装的 url 返回一个字符串,在 wicket 中我猜它只是试图将 url 呈现到网页中,这不是我想要的。我想我必须重写网页中的方法或其他什么?

现在我对检票口很陌生,所以我真的不知道该怎么做。例如,我使用 Spring 制作了同样的软件,我可以将 url 映射到 @RequestMapping("/url") 并使用 @ResponseBody 将返回类型更改为字符串。这可能是一个愚蠢的问题,但我就是找不到解决办法。我已经阅读了很多 wicket 文档并试图找到类似的问题但没有找到任何东西。

编辑:所以我必须能够读取小程序发送的 POST 请求参数,并将字符串发送回小程序。我不知道小程序是如何工作的,所以我只知道它会发送一个带有属性的发布请求到某个地址,并且它会执行多次。

谢谢 萨姆

【问题讨论】:

    标签: java string url wicket mount


    【解决方案1】:

    你必须挂载一个自定义的Resource

    mountResource("myStringResource", customResourceReference);
    

    关于自定义资源和安装它们,您可以在此处阅读: http://wicket.apache.org/guide/guide/resources.html#resources_7 和下一章。

    【讨论】:

    • 我真的必须使用自定义资源吗?我正在考虑将这样的东西放在扩展 WebPage WebResponse response = (WebResponse) getRequestCycle().getResponse(); response.setContentType("text/plain"); response.write(responseToClient); getRequestCycle().setResponse(response); response.close(); 的 .java 类中
    • 您不必这样做,但在我看来,它应该这样做。如果您想将页面呈现为文本并至少使用 Wicket 6.7.0,您可以尝试:ci.apache.org/projects/wicket/apidocs/6.0.x/org/apache/wicket/…
    【解决方案2】:

    如另一个答案中所述,您可以使用自定义资源来执行此操作。

    但是您也可以通过创建WebPage 的子类并覆盖renderPage 方法来或多或少地获得您在问题中描述的内容:

    public class TextPage  extends WebPage {
    
        @Override
        public final void renderPage() {
            WebResponse response = (WebResponse) getResponse();
            response.setContentType("text/plain");
            response.write("Hello World!");
        }
    
    }
    

    当然,正如您的问题所述,您还希望获取小程序发送的 POST 参数并根据这些参数生成响应文本,而不仅仅是使用常量字符串...

    您可以从请求中获取这些参数:

        Request request = getRequest();
        IRequestParameters postParameters = request.getPostParameters();
        StringValue testParam = postParameters.getParameterValue("test");
        String testParamValue = testParam.toString();
    

    所有这一切都在某种程度上绕过了通常的 Wicket 做事方式,因为 Wicket 试图结束对请求和响应的访问,这样您就不必直接处理它们,但它可能适合您的情况.

    【讨论】:

    • 谢谢,这真的很有帮助,解决了我的问题。当我有时间时,我可能会尝试使用该自定义资源,但覆盖渲染会有所帮助!谢谢@Don
    猜你喜欢
    • 2021-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-01
    • 2020-10-15
    • 2019-09-15
    • 1970-01-01
    相关资源
    最近更新 更多