gpt4 book ai didi

javascript - Wicket 7 [WebPage] - jquery 请求创建新实例 WebPage

转载 作者:行者123 更新时间:2023-11-30 20:36:04 26 4
gpt4 key购买 nike

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

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

Javascript:

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

Ajax 行为:

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);
}
}

想法?

最佳答案

您需要传递特殊的 Wicket-Ajax 请求参数。查看由 Wicket Ajax 行为发送的那些,以了解它们的确切名称。

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

关于javascript - Wicket 7 [WebPage] - jquery 请求创建新实例 WebPage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49823885/

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