我的应用程序有一个websocket客户端运行在客户端,我使用websocket上传文件。
我有一个wicket WebPage,它有两种方式上传USB文件(自动和输入类型文件),当我的页面被实例化时,它有一个实例"X“。当ajax请求由wicket组件发出时,我的页面有实例"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);
}
}想法?
发布于 2018-04-14 05:19:14
您需要传递特殊的Wicket请求参数。查看Wicket行为发送的文件,了解它们的确切名称。
因为它们是:Wicket=true和=something。请参阅wicket-ajax-jquery.js,以了解如何为第二个值创建值。
https://stackoverflow.com/questions/49823885
复制相似问题