Gwt выполняет итерацию текстовых элементов управления в составном

#gwt #gwt2

#gwt #gwt2

Вопрос:

Можно ли выполнить итерацию по всем элементам управления текстовыми полями, определенным в составном виджете? Например, мне нужно извлечь значения всех текстовых полей, чтобы проверить, существуют ли они — в текстовых полях должны быть какие-то данные.

Итак, я надеялся получить метод, подобный:

 for(Widget w: this.getChildren)
 {
      //if widget is a textbox - check value
 }
  

У составного класса нет метода, подобного getChildren, ни метода, с помощью которого я могу получить элементы заданного класса или имени, и если я получу все элементы, используя NodeList, тогда мне нужно рекурсивно перейти, пока я не найду текстовое поле. Есть ли более подходящий способ сделать это?

Ответ №1:

Как автор подкласса Composite, вы можете включить такое поведение, внедрив HasWidgets (или, более конкретно, что-то вроде getWidgetIterator()).

Нет способа сделать это для произвольного составного элемента.

Комментарии:

1. Если кто-то использует HasWidgets — тогда имело бы смысл добавлять виджеты в составной динамически и устанавливать значение provided=true в UiFields?. В противном случае, как пользовательский итератор узнает о количестве добавленных виджетов, если определения присутствуют в ui.xml файлы?

2. Вам пришлось бы запрограммировать итератор, чтобы узнать о виджетах. ComplexPanel уже реализовано HasWidgets , поэтому, если вы создаете свой ui.xml файлы со списком виджетов в потоковой панели (или другой сложной панели), для которых вы можете сделать что-то подобное (дочерний виджет: потоковая панель) {};