Gwt 如何强迫widget重新绘制自己

Gwt 如何强迫widget重新绘制自己,gwt,Gwt,我刚刚开始使用gwt,我正在尝试解决以下任务: 我有两门课,一年一个月,一年一个月。在我的实现课程中,我有 UiField(provided = true) Composite composite; Month month; Year year; ... //Constructor @Inject MyClassImpl(){ month = new Month(); year = new Year(); composite = month; } updateComposite

我刚刚开始使用gwt,我正在尝试解决以下任务: 我有两门课,一年一个月,一年一个月。在我的实现课程中,我有

UiField(provided = true)
Composite composite;

Month month;

Year year;
...
//Constructor
@Inject
MyClassImpl(){
  month = new Month();
  year = new Year();
  composite = month;
}

updateComposite(){
  composite = year;
  logger.fine("composite = " + composite);
}

我的问题是,当我调用updateComposite()方法时,我在控制台上看到它被更新了,但在屏幕上没有重新绘制。看起来我的问题的答案很简单,但我没能找到。我查看了这里和其他一些地方。

如果类中的字段(如果是JS对象,则将转换为属性)没有将组件交换到DOM中,则更改值


您需要在DOM中用新值代替旧值。不过,实现这一点的方法在很大程度上取决于ui.xml。一种可能是在ui.xml中使用SimplePanel,并使用setWidget设置要显示的适当小部件。

如果类中的字段(如果是JS对象,将转换为属性)没有将组件交换到DOM中,则更改值


您需要在DOM中用新值代替旧值。不过,实现这一点的方法在很大程度上取决于ui.xml。一种可能是在ui.xml中使用SimplePanel,并使用setWidget设置要显示的适当小部件。

谢谢,我查看了setWidget源代码,发现将小部件附加到DOM树是我忘记做的事情。谢谢,我浏览了setWidget源代码,发现将小部件附加到DOM树是我忘记做的事情。