为啥异步服务不填写复选框表单面板?
Posted
技术标签:
【中文标题】为啥异步服务不填写复选框表单面板?【英文标题】:Why async service dont fill check-box form panel?为什么异步服务不填写复选框表单面板? 【发布时间】:2017-08-31 12:37:58 【问题描述】:我正在开发一个 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 在表单面板出现之后显示。所以表单面板出现了,然后调试到我的方法并完成所有工作。
【问题讨论】:
你说的是复选框,但我只看到创建了一个复选框。 我改变了它,我将 bb = new CheckBox() 移到 foreach 中,但还是一样.. 【参考方案1】:它应该看起来像这样:
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"/>
由于复选框超出范围,您没有向表单面板添加任何内容。
编辑:添加日志输出信息
【讨论】:
我一般用SimpleCheckBox
代替CheckBox
。还要检查您的表单面板是否正在使用 Chrome 或 Firefox 中的检查器添加到正文中。添加一些调试输出以确保它也能到达那段特定的代码。
我现在就试试。
更新了答案中的代码。希望日志记录能够将您带到某个地方。
是的,它是一个异步 RPC 调用,仅当服务器完成处理后才返回 onFailure 或 onSuccess。 99% 的 GWT 由事件运行,服务器调用相同。【参考方案2】:
请注意,FormPanel 是实现 HasOneWidget,因此如果您尝试将另一个小部件放入容器,它将覆盖它
【讨论】:
以上是关于为啥异步服务不填写复选框表单面板?的主要内容,如果未能解决你的问题,请参考以下文章
树形ztree 与angularjs结合,实现下级数据异步加载,点击复选框 填写到输入框里