gpt4 book ai didi

java - 在 Wicket 中实现后台下载最简单的方法是什么?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:04:04 26 4
gpt4 key购买 nike

我有一个简单的 Wicket 表单,它允许用户选择一些数据,然后下载一个 ZIP 文件(即时生成),其中包含他们所要求的内容。目前表单按钮的 onSubmit() 方法看起来像这样:

public void onSubmit() {
IResourceStream stream = /* assemble the data they asked for ... */ ;
ResourceStreamRequestTarget target = new ResourceStreamRequestTarget(stream);
target.setFileName("download.zip");
RequestCycle.get().setRequestTarget(target);
}

这行得通,但当然请求会停在那里,不可能向用户显示任何其他反馈。

我想要的是类似于典型的“您请求的下载 [NAME] 应该自动开始。如果没有,请单击此链接。”理想情况下,仍然显示相同的页面,以便用户可以立即选择一些不同的数据并进行下载。

我想可以使用 Wicket 的 Ajax 类来完成此操作,但到目前为止我已经设法避免必须使用它们,而且我还不是很清楚如何使用它们。在这里,我最快的出路是什么?


根据 Zeratul 的回答更新,如下:我最终得到的是这样的:

class MyDownloader extends AbstractAjaxBehavior {

private final MyForm form;

MyDownloader(MyForm form) {
this.form = form;
}

void startDownload(AjaxRequestTarget target) {
target.addComponent(myForm);
target.appendJavascript("window.location.href='" + getCallbackUrl() + "'");
}

@Override
public void onRequest() {
try {
ResourceStreamRequestTarget streamTarget = form.getStreamTarget();
form.info(/* some status message */);
getComponent().getRequestCycle().setRequestTarget(streamTarget);
catch (SomeException e) {
form.error(e.getMessage());
}
}
}

class MyForm extends Form {

private final MyDownloader myDownloader;
private final Object myModel;

MyForm(Object aModel) {
super("myForm");
myModel = aModel;
myDownloader = new MyDownloader(this);

add(myDownloader);

add(/* form components */);
add(new AjaxButton("download", new Model<String>("Download"), this) {
@Override
protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
myDownloader.startDownload(target);
}
});

add(new FeedbackPanel("feedback"));
}

ResourceStreamRequestTarget getStreamTarget() throws SomeException {
return /* target based on form input */;
}
}

这感觉有点摇摇欲坠,但它似乎有效。

最佳答案

Apache cwiki 上有一篇关于这个的文章,它可能适合你:

ajax download

关于java - 在 Wicket 中实现后台下载最简单的方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2668364/

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