Java 提交表单时呈现wicket组件

Java 提交表单时呈现wicket组件,java,jakarta-ee,wicket,Java,Jakarta Ee,Wicket,我正在尝试更新和呈现组件,同时使用onSubmit of IndicationGajaxButton提交表单。但一旦提交完成,所有组件都将被渲染。在我的表单仍在提交时,是否有任何方法可以呈现它们,比如在表单提交时显示更新进度条。我想在每个rest调用执行时显示进度。 这大概就是我正在做的: public class MyPage { Form form; int items; WebMarkupContainer progressbar = new WebMarkupCo

我正在尝试更新和呈现组件,同时使用onSubmit of IndicationGajaxButton提交表单。但一旦提交完成,所有组件都将被渲染。在我的表单仍在提交时,是否有任何方法可以呈现它们,比如在表单提交时显示更新进度条。我想在每个rest调用执行时显示进度。 这大概就是我正在做的:

public class MyPage {
    Form form;
    int items;
    WebMarkupContainer progressbar = new WebMarkupContainer("progressbar");
    int progress = 0;
    MyData dataItems = new MyData();

    public MyPage() {
        progressbar.setOutpuMarkupId(true);
        items = 5;
        setupForm();
    }

    public void setupForm() {
        form = new Form("form", new CompundPropertyModel(dataItems));
        form.add(new IndicatingAjaxButton("button") {
            @Override
            protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
                for (int i = 0; i < items; i++) {
                    progress++;
                    progressbar.add(new AttributeModifier("style", "width: " + progress + "%;"));
                    //rest post call goes here
                }
            }
        });
    }

    add(form);
    add(progressbar);

}


//in html page
<div wicket:id="progressbar" id="progressbar" style="width: 0% ; background-color:green;"></div>
公共类MyPage{
形式;
国际项目;
WebMarkupContainer progressbar=新的WebMarkupContainer(“progressbar”);
int progress=0;
MyData dataItems=新的MyData();
公共MyPage(){
progressbar.setOutpuMarkupId(true);
项目=5项;
setupForm();
}
公共表格(){
表单=新表单(“表单”,新的CompundPropertyModel(dataItems));
表格.添加(新指示按钮(“按钮”){
@凌驾
提交时受保护的void(AjaxRequestTarget目标,表单){
对于(int i=0;i
最好的方法是使用Wicket原生WebSocket。使用
IWebSocketRequestHandler
可以在长时间操作期间更新Wicket组件和/或发送原始文本(JSON、HTML)。您可以根据需要多次推送,例如以百分比显示进度


另一个更简单的解决方案是使用AjaxCallListener#onBeforeSend()回调在进行Ajax调用(表单提交)之前使用JavaScript进行UI更新。使用这种方法,您只有一次机会,即您可以显示加载指示器,但无法显示当前进度。

最好的方法是使用Wicket原生WebSocket。使用
IWebSocketRequestHandler
可以在长时间操作期间更新Wicket组件和/或发送原始文本(JSON、HTML)。您可以根据需要多次推送,例如以百分比显示进度


另一个更简单的解决方案是使用AjaxCallListener#onBeforeSend()回调在进行Ajax调用(表单提交)之前使用JavaScript进行UI更新。使用这种方法,您只有一次机会,即,您可以显示加载指示器,但无法显示当前进度。

如果我理解,您是否考虑在数百毫秒内快速提交(服务器端前端接受),以及在服务器后端使用长算法?第二次尝试猜测是上传大文件。Wicket有一些ajaxified解决方案(官方网站上的指南),如果我理解的话,你会考虑在服务器端以数百毫秒的最大速度快速提交(前端接受)和在服务器后端使用长算法吗?第二次尝试猜测是上传大文件。Wicket有一些ajaxified解决方案(官方网站指南)