首页 > 解决方案 > 从 AbstractDefaultAjaxBehavior 中的请求中检索多部分数据

问题描述

我正在尝试创建一个组件以将 CKEditor 与 Apache Wicket 一起使用。我在 CKEditor 中添加了一个插件来将图像发送到服务器。为此,我使用了为客户端提供的示例:

CKEditor:自定义图片上传适配器

对于服务器端,我创建了这个 Java 代码:

add(new AbstractDefaultAjaxBehavior() {
        @Override
        protected void updateAjaxAttributes(final AjaxRequestAttributes attributes) {
            super.updateAjaxAttributes(attributes);
            attributes.setMethod(Method.POST);
            attributes.setMultipart(true);
            attributes.setDataType("json");
        }

        @Override
        protected void respond(final AjaxRequestTarget target) {

            // Avoid the redirect (302)
            final RequestCycle requestCycle = getRequestCycle();
            requestCycle.scheduleRequestHandlerAfterCurrent(null);

            // Return the picture URL
            final WebResponse response = (WebResponse) RequestCycle.get().getResponse();
            response.setStatus(200);
            response.setContentType("application/json");
            response.write("{ \"url\": \"http://localhost:8080/image/foobar.jpg\"}");
        }

        @Override
        public void renderHead(final Component component, final IHeaderResponse response) {
            super.renderHead(component, response);
            final String callbackUrl = getCallbackUrl().toString();
            response.render(JavaScriptHeaderItem.forScript("ckeditorCallbackUrl = '" + callbackUrl + "';",
                    "ckeditorCallbackUrl"));
        }
    });

但是在响应方法中,我不知道如何使用图像访问多部分数据。

如何检索此表单数据?

谢谢你。

标签: ajaxwicketckeditor5

解决方案


您可以使用以下方式读取文件:

ServletWebRequest webRequest = (ServletWebRequest) RequestCycle.get().getRequest();
MultipartServletWebRequest multiPartRequest = webRequest.newMultipartWebRequest(getMaxSize(), "ignored");
multiPartRequest.parseFileParts();
Map<String, List<FileItem>> files = multiPartRequest.getFiles();

您可以在http://wicketinaction.com/2012/11/uploading-files-to-wicket-iresource/阅读更多相关信息


推荐阅读