【问题标题】:render wicket components while submitting form提交表单时渲染检票口组件
【发布时间】:2017-01-12 18:42:37
【问题描述】:

我在使用 IndicatingAjaxButton 的 onSubmit 提交表单时尝试更新和呈现组件。但是一旦 onSubmit 完成,所有组件都会被渲染。有什么方法可以在我的表单仍在提交时呈现它们,比如在表单提交时显示更新进度条。我想在每次休息调用执行时显示进度。 这大致就是我正在做的事情:

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>

【问题讨论】:

  • 如果我理解,您是否考虑过最多数百毫秒的快速提交(由服务器端的前端接受),以及服务器后端的长算法?提供代码来帮助你
  • 第二次猜测,是上传大文件。 Wicket 有一些 ajaxified 解决方案(官方网站上的指南)

标签: java jakarta-ee wicket


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-15
    相关资源
    最近更新 更多