为什么异步服务不填充复选框表单面板?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么异步服务不填充复选框表单面板?相关的知识,希望对你有一定的参考价值。

我正在开发一个GWT应用程序,当用户点击按钮时,应该会出现带有复选框的表单面板。这些复选框应填充来自异步服务的项目列表。但是当我打开表单面板时,我没有那些复选框。我调试,看到我的服务的结果不是按时到位,但后来列表已满..这是代码:

     @Override
        public void createBody() {


            GWT_ACCESS_ROLE_SERVICE.findByUserId(null, currentSession.getSelectedAccount().getId(), userId, new AsyncCallback<PagingLoadResult<GwtAccessRole>>() {

                @Override
                public void onFailure(Throwable caught) {
                    // TODO Auto-generated method stub

                }

                @Override
                public void onSuccess(PagingLoadResult<GwtAccessRole> result) {
                  lista   = result.getData();
                    for (GwtAccessRole gwtAccessRole : lista) {
                     bb = new CheckBox();
                        bb.setBoxLabel(gwtAccessRole.getRoleName());
                    }
                    FormPanel roleFormPanel = new FormPanel(FORM_LABEL_WIDTH);
                    roleFormPanel.add(bb);

                    bodyPanel.add(roleFormPanel);

                }
            });

        }

我做错了什么以及为什么我的复选框没有填写?提前致谢。

编辑:当我调试时,此方法GWT_ACCESS_ROLE_SERVICE.findByUserId显示在表单面板出现后。所以Form Panel上传,然后调试转到我的方法并完成所有的事情。

答案

它应该看起来像这样:

import java.util.logging.Logger;

final Logger log = Logger.getLogger("LOG OUTPUT");

@Override
public void onSuccess(PagingLoadResult<GwtAccessRole> result) {

    if (result == null) {
        log.info("No data from the server");
        return;
    }

    lista   = result.getData();

    FormPanel roleFormPanel = new FormPanel(FORM_LABEL_WIDTH);

    for (GwtAccessRole gwtAccessRole : lista) {
        bb = new CheckBox();
        bb.setBoxLabel(gwtAccessRole.getRoleName());
        roleFormPanel.add(bb);

        // display on the JS console output
        log.info("CheckBox added to roleFormPanel");
    }

    bodyPanel.add(roleFormPanel);

    // confirm panel being added
    log.info("Panel added to body");
}

.gwt.xml模块将添加以下行:

<inherits name="com.google.gwt.logging.Logging"/>
<set-property name="gwt.logging.enabled" value="TRUE"/> 

您没有向表单面板添加任何内容,因为复选框已超出范围。

编辑:添加日志输出信息

另一答案

请注意,FormPanel是实现HasOneWidget,因此如果您尝试将另外一个窗口小部件添加到容器中,它将覆盖它

以上是关于为什么异步服务不填充复选框表单面板?的主要内容,如果未能解决你的问题,请参考以下文章

使用复选框使用 AJAX 填充 rails 表单

在哪里以及如何使用片段填充我的标签

winforms - 表单加载期间带有dockstyle填充的用户控件大小不正确

导航抽屉异步任务

如何使用 jQuery 重新填充表单提交时隐藏的 CSV 字段

Android - 为列表视图填充适配器的异步任务