GWT: Как получить результат представления из FormPanel

Пример из FormPanel javadoc говорит:

"... Предполагая, что служба вернула ответ типа text/html, мы можем получить текст результата здесь (см. документацию FormPanel для дальнейшего объяснения)..."

Однако javadoc не объясняет немного об этой теме. Кто-нибудь нашел, как получить ответ HTML, отправленный с сервера после отправки формы?

Ответы

Ответ 1

Добавьте FormHandler в свою FormPanel, а в onSubmitComplete вы получите FormSubmitCompleteEvent. Вызовите метод getResults(), чтобы получить результат.

form.addFormHandler(new FormHandler() {
    public void onSubmit(FormSubmitEvent event) { // validation etc }

    public void onSubmitComplete(FormSubmitCompleteEvent event} {

         Window.alert(event.getResults()); // display the result
    }

};

Ответ 3

Следуя ответу от "Robert Munteanu", вы должны посмотреть:

http://google-web-toolkit.googlecode.com/svn/javadoc/2.0/com/google/gwt/user/client/ui/FormPanel.SubmitCompleteEvent.html

И там вы можете увидеть:

getResults

public java.lang.String getResults()

Получает текст результата представления формы.

Возврат:

результат html, или null, если была ошибка с его чтением

Совет:

Результат html может быть нулевым в результате отправки формы в другой домен.

Ответ 4

//=========== на стороне клиента:

SubmitCompleteHandler sch = new SubmitCompleteHandler()
{
    public void onSubmitComplete(SubmitCompleteEvent event) 
    {
    //get back the data results that had input the .xml 
    String dpsString = event.getResults();

    //And do your wanted action with the result
    System.out.println(dpsString);
    }
};
uploadForm.addSubmitCompleteHandler(sch);   

//=========== на стороне сервера:

// parse and handle file, e.g. if there is an xml file
...
InputStream fileImputStream = uploadItem.getInputStream();
DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
Document doc = docBuilder.parse(fileInputStream);
doc.getDocumentElement().normalize();
System.out.println("Root element of the doc is " + doc.getDocumentElement().getNodeName());
...
//Response to the request with the result  
dpsString = doc.getDocumentElement().getNodeName();
response.getWriter().write(new String(dpsString)); 

Ответ 5

Я попытался заменить локальный хост машинным именем, это не помогло [некоторые говорят, что это помогло им], но это проблема с перекрестным доменом java- script, поэтому я попытался просто использовать шаблон URL, назначенный в веб-xml и я получил результат String. для получения дополнительной информации см. ответ резиновой утки в этой ссылке

Ошибка GWT Blobstore при вызове createUploadUrl()

Ответ 6

Мне удалось получить сообщение результата в режиме DEV со следующим кодом:

клиентская сторона:

FormPanel formPanel = new FormPanel();
            FormElement.as(formPanel.getElement()).setAcceptCharset("UTF-8");
formPanel.setAction(sb.toString());
formPanel.setMethod(FormPanel.METHOD_POST);
formPanel.setVisible(false);
RootPanel.get().add(formPanel);
formPanel.submit();
formPanel.addSubmitCompleteHandler(new FormPanel.SubmitCompleteHandler()     {                  
@Override
    public void onSubmitComplete(SubmitCompleteEvent event) {
        String results = event.getResults();
    }
});

сторона сервера:

response.setContentType("text/html");
response.setHeader("Pragma", "No-cache");
response.setDateHeader("Expires", 0);
response.setHeader("Cache-Control", "no-cache");
response.getWriter().write(e.getMessage()); 

Браузер: Firefox 24.3.0, GWT Версия: 2.5.1

Ответ 7

Для меня проблема заключалась в том, что я построил свой FormPanel с помощью конструктора FormPanel(String). С конструктором по умолчанию мой SubmitCompleteHandler просто работал.