gwt打开一个新窗口并发布json数据

时间:2014-05-30 14:17:50

标签: gwt post httprequest

我有一个有botton的页面。我想点击按钮并打开一个新窗口。同时,我会将Json数据发送到该请求。我知道gwt有get方法打开一个像这样的新窗口:Window.open(url,“”,“”);但这不是一种后期方法。 所以我尝试使用RequestBuilder。但是,这只是一个Ajax调用。我想要的是在发送post json请求之后,它将获得响应(响应包括html div)并打开一个新窗口。任何人都有任何想法?

1 个答案:

答案 0 :(得分:1)

尝试使用HttpSession保存同一域内任何页面都可以访问的用户特定数据的状态。

要遵循的步骤:

  • 只需创建 GWT RPC call 即可在发布请求中将JSON字符串传递给服务器。
  • 在RPC调用的服务器端,将 HTTP会话中的JSON字符串保存以便以后访问
  • 现在打开一个新页面(具有相同域),将从HTTP会话中访问JSON字符串

包括GWT PRC类的完整示例代码

@RemoteServiceRelativePath("greet")
public interface GreetingService extends RemoteService {
    public void setJSON(String json)throws IllegalArgumentException;
}

public interface GreetingServiceAsync {  
    void setJSON(String json, AsyncCallback<Void> callback);
}

public class GreetingServiceImpl extends RemoteServiceServlet implements GreetingService {
    @Override
    public void setJSON(String json) throws IllegalArgumentException {
        // set the JSON string in HTTP Session
        getThreadLocalRequest().getSession().setAttribute("json", json);
    }
}

的web.xml:

<servlet>
    <servlet-name>greetServlet</servlet-name>
    <servlet-class>com.x.y.z.server.GreetingServiceImpl</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>greetServlet</servlet-name>
    <url-pattern>/modulename/greet</url-pattern>
</servlet-mapping>

入口点类:

GreetingServiceAsync greetingService = GWT.create(GreetingService.class);
public class GWTProject implements EntryPoint {
    public void openNewWindow(final String json) {
        greetingService.setJSON(json, new AsyncCallback<Void>() {

            @Override
            public void onFailure(Throwable caught) {

            }

            @Override
            public void onSuccess(Void result) {
                // open any page within the same domain
                Window.open("/page.jsp", "", "");
            }
        });
 }