Невозможно заставить GWT FormPanel работать должным образом - PullRequest
6 голосов
/ 20 июня 2009

Я пробовал это уже несколько дней, но безуспешно.

final FormPanel form = new FormPanel(new NamedFrame("test"));
form.setAction("/designer");
form.setMethod(FormPanel.METHOD_POST);
VerticalPanel panel = new VerticalPanel();
form.setWidget(panel);

final TextBox tb = new TextBox();
tb.setName("style");
panel.add(tb);
panel.add(new Button("Submit", new ClickHandler() {
public void onClick(ClickEvent event) {
   Window.alert("submitting to:" + form.getTarget());
   form.submit();
    }
}));
form.addSubmitCompleteHandler(new SubmitCompleteHandler() {
public void onSubmitComplete(SubmitCompleteEvent event) {
  Window.alert("complete");
  Window.alert(event.getResults());
}
});

В размещенном режиме ничего не происходит после срабатывания оповещения "Отправка в". В Chrome форма загружается на отдельной вкладке, но сам POST пуст. В Firefox и IE, опять же, ничего не происходит после оповещения. Есть идеи?

Я настроил сервлет в / designer, который выводит заголовок и тело запроса из любых запросов страницы. Я могу нажать на этот сервлет с простой HTML-страницы и увидеть ожидаемый результат. Из GWT запрос никогда не появляется (кроме Chrome, в котором запрос появляется, но с пустым телом).

Ответы [ 3 ]

2 голосов
/ 01 апреля 2010

Попробуйте переместить form.setWidget(panel); на дно.

Кроме того, убедитесь, что вы добавили форму на панель контейнера, т.е. add(form);, а не на вертикальную панель.

1 голос
/ 20 июня 2009

Ваш код почти идентичен примеру API FormPanel , поэтому я должен предположить, что логика верна.

Существует ли сервлет в "/ designer"? Документация для SubmitCompleteHandler гласит, что событие onSubmitComplete возникает только в случае успешной отправки.

Вот поток, содержащий пример кода для написания сервлета, который обрабатывает сообщение формы: http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/77e68fcb9097debc

0 голосов
/ 28 марта 2013

Я знаю, что этому посту 3 года, но ради любого гуглера, как я, который приземляется здесь, это условия для запуска OnSubmitCompleteEvent :

  1. Используйте конструктор без аргументов для построения формы: FormPanel f = new FormPanel (); . Как упомянуто в Javadoc :

    Создает новую панель FormPanel. При создании с использованием этого конструктора он будет быть переданы скрытому элементу

    Так что это единственный, который запускает отправку формы завершения событие в случае успеха.

  2. Убедитесь, что вызываемое действие возвращает ответ с Тип содержания: "текст / html"

Одним из решений, если вам все еще нужно использовать внешний NamedFrame , является отслеживание LoadEvent на кадре. Он запускается, когда начинается загрузка кадра, это означает, что пришел ответ от сервера: ...

NamedFrame frame = new NamedFrame("test");
frame.addLoadHandler(new LoadHandler()
{
    void onLoad(LoadEvent event)
    {
        //your code here
    }
});

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...