GWT не является JSP.Не PHP.
Использование FormPanel предназначено для начинающих или для совместимости с существующими сервлетами обработки форм, или для быстрых и грязных задач.Я должен признать, я мог бы забыть, как использовать панели форм.
Как только вы освоите формы, вы, вероятно, захотите перейти к RPC, RequestBuilder или RES для отправки ваших данных вserver.
Во-первых, в GWT вы должны избегать получения элементов виджетов, если это не является абсолютно необходимым (например, настройка поведения через JSNI).
Ниже приведен код, который может быть не слишком точным, но это помогает понять.
protected void onLoad() {
HashMap<String, Widget> formWidgetHash = new HashMap<String, Widget>();
FlexTable table = new FlexTable();
FormPanel form = new FormPanel();
form.setWidget(table);
service.getFields(AysncCallbak<Fields> callback) {
public void onSuccess(Fields result) {
int i = 0;
for(Object yo : fields.stuff()) {
mkFormWidget(formWidgetHash, table, i++, yo);
}
}
}
}
Вы можете запомнить форму в HashMap.Вы можете просмотреть значения, шагая по HashMap.
Но вам не нужно этого делать.Просто отправьте форму.Форма разрешит поля.
private void mkFormWidget(
HashMap formWidgetHash, FlexTable table, int row, Object yo) {
// LHS of table is field prompt
String prompt = resolvePrompt(yo);
table.setText(row, 0, prompt);
Widget formWidget;
if (yo instanceof Boolean){
formWidget = new CheckBox();
}
else { ...
}
else { ...
}
else {
formWidget = new TextBox();
}
table.setWidget(row, 1, w);
formWidgetHash.put(prompt, w);
}
abstract protected String resolvePrompt(Object o);
Я не понимаю, зачем вам нужен доступ к виджетам перед отправкой формы на сервер.Если вам нужно добавить валидатор поля, вы должны добавить его в виджет формы во время его создания в mkFormWidget.
Однако, если вы хотите иметь как позиционный, так и хэш-ключ доступа к виджетам формы, вымог следовать за ответом в этом вопросе: Карты (коллекция), которая поддерживает Порядок вставки в Java .