首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Wicket 7 [ WebPage ] - jquery请求创建一个新实例WebPage

Wicket 7 [ WebPage ] - jquery请求创建一个新实例WebPage
EN

Stack Overflow用户
提问于 2018-04-13 19:27:00
回答 1查看 128关注 0票数 1

我的应用程序有一个websocket客户端运行在客户端,我使用websocket上传文件。

我有一个wicket WebPage,它有两种方式上传USB文件(自动和输入类型文件),当我的页面被实例化时,它有一个实例"X“。当ajax请求由wicket组件发出时,我的页面有实例"X“。当请求由javascript代码发出时,处理以"X“进行,但在处理wicket创建一个新实例" Y”而不使用"X“中处理的数据,并向用户显示实例Y时,总是在发出新的ajax(javascript代码)请求时发生。

Javascript:

代码语言:javascript
复制
$.ajax({
        url : postUrl,
        type : 'post',
        cache : false,
        data :data,
        processData: false, 
        contentType: false, 
        complete : function(xhr, status) {
            $("#messagemWs").html("");
            wsBu.stopBusca();
        }
    }); 

Ajax行为:

代码语言:javascript
复制
public class WsFilesAjaxBehavior extends AbstractDefaultAjaxBehavior {

    private static final long serialVersionUID = 1L;

    public static final String WS_CALBACK = "my:wsupload.callback";

    private WsFilesAjaxBehaviorCallback callback;

    public WsFilesAjaxBehavior(WsFilesAjaxBehaviorCallback callback) {
    super();
    this.callback = callback;
    }

    public void setCallback(WsFilesAjaxBehaviorCallback callback) {
        this.callback = callback;
    }



    @Override
    protected void onComponentTag(ComponentTag tag) {
    tag.put(WS_CALBACK, getCallbackUrl().toString());
    super.onComponentTag(tag);
    }

    private void buildFileUploadList(List<FileItem> fileItemsRequest, List<FileUpload> fileItems) {
    for (FileItem fileItem : fileItemsRequest) {
        fileItems.add(new FileUpload(fileItem));
    }
    }

    private void getRequestFiles(final RequestCycle requestCycle, AjaxRequestTarget target) {

    final ServletWebRequest webRequest = (ServletWebRequest) requestCycle.getRequest();

    Map<String, List<FileItem>> multiPartRequestFiles = null;

    try {
        MultipartServletWebRequest multiPartRequest = webRequest.newMultipartWebRequest(Bytes.megabytes(1), "UploadInfo");
        multiPartRequest.parseFileParts();
        multiPartRequestFiles = multiPartRequest.getFiles();
    } catch (FileUploadException e) {
        e.printStackTrace(System.out);
        return;
    }

    List<FileUpload> fileUploads  = new ArrayList<>();

    if (multiPartRequestFiles != null && !multiPartRequestFiles.isEmpty()) {
        for (Entry<String, List<FileItem>> entry : multiPartRequestFiles.entrySet()) {
        System.out.println(entry.getKey());
        buildFileUploadList(entry.getValue(), fileUploads);
        }
    }


    callback.webSocketCallback(fileUploads, target);


//  target.appendJavaScript("alert('Processado!');");  
    }



    @Override
    protected void respond(AjaxRequestTarget target) {

    RequestCycle requestCycle = RequestCycle.get();
    getRequestFiles(requestCycle, target);
    }
}

想法?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-14 05:19:14

您需要传递特殊的Wicket请求参数。查看Wicket行为发送的文件,了解它们的确切名称。

因为它们是:Wicket=true和=something。请参阅wicket-ajax-jquery.js,以了解如何为第二个值创建值。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49823885

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档