2012-01-06 65 views
0

我有一个gwt应用程序,并且在某个时候打开了一个applet,当这个applet执行一个动作时,它调用一个servlet。 从这个servlet中,我需要将应用程序重定向到令牌“#Home”。从Servlet重定向GWT应用程序

我试图调用History.newItem(“#home”),但它返回一个异常“服务器端的未引导操作”。

我试着从servlet中再次返回applet,并在applet中调用一个与jnsi一起导出的javascript,它重定向到home,但它不工作,导航器(google chrome)可以看到我的导出函数,但是当调用在小程序它给出了一个错误“功能未找到”

感谢您的任何帮助。

回答

1

我猜的小程序,你实际上并不意味着从客户端通过GWT生成的Java小程序,但HTML和Javascript Java代码。确保不要混淆这些概念。您的GWT项目具有客户端Java代码(在编译时将其转换为HTML和CSS)和服务器Java代码,这些代码按原样部署在服务器上。在服务器端调用History.newItem(...)是没有意义的,这是应该在客户端Java中执行的代码,以便将其转换为Javascript并在浏览器中调用(导航历史仅在浏览器)。

此外,您要在此处执行的操作不是使HTTP重定向本身,而是仅使用附加的锚点导航到不同的GWT页面/窗口小部件。而且我猜你希望将其也放入浏览器导航的历史记录中,以便用户可以正确使用浏览器的“后退”和“前进”按钮。为此,您只需在GWT主类上实现ValueChangeHandler<String>接口,实施public void onValueChange(ValueChangeEvent<String> event)并解析事件中接收到的锚并相应地更改视图。然后,当用户点击一个按钮什么的,您的用户历史类ISSE一个新的事件,像这样:

History.newItem("Home", true); 

(true意味着将要产生的事件,否则你只是添加“家”令牌给浏览器的历史堆栈)。

这将调用onValueChange(...)一个包含“home”标记的事件,并且您可以解析该标记并执行任何您想要的操作。

http://google-web-toolkit.googlecode.com/svn/javadoc/1.5/com/google/gwt/user/client/History.html#newItem(java.lang.String,布尔值)