GWT:如何创建新页面

时间:2011-05-10 11:31:34

标签: java gwt

我有一个页面的GWT MVP应用程序。如何创建新页面并链接到它?

5 个答案:

答案 0 :(得分:3)

如果您使用GWT谈论页面导航,这link可能会对您有所帮助。

答案 1 :(得分:1)

您可以做一件事,在同一页面上制作不同的布局,在特定的操作中,您可以隐藏一个布局并显示其他布局或组件。

答案 2 :(得分:1)

GWT通过网址fragment identifier支持应用内的网页,即http://www.yourhost.vom/main#pagename,其中“pagename”是代表您应用内“网页”的片段标识符。

  1. 通过向主页添加iframe来启用history support

    <iframe src="javascript:''" 
            id="__gwt_historyFrame" 
            style="width:0;height:0;border:0">
    </iframe>
    
  2. 注册ValueChangeHandler,以便在历史记录(页面)更改时收到通知。在此处理程序中,您放置了一个显示新页面的逻辑。

  3. 致电History.newItem("newpage")

  4. 转到特定页面

答案 3 :(得分:1)

我创建了一个开源的MIT许可项目,以简化GWT中的页面导航处理。看一下GWT Views项目。

使用它,您可以使用简单的Java注释定义View(由唯一URL令牌引用的Widget)。该框架为您处理code-splitting,并隐藏所有样板代码。

以下是一个例子:

@View(Login.TOKEN)
public class Login extends Composite {
//... your code, you can use UIBinder, procedural UI, whatever you like

使用History.newItem(Login.TOKEN)时,Login窗口小部件将在页面上呈现。

框架也处理了很多常见用例,例如ViewContainers,404页面,Google Analytics跟踪和用户授权。

答案 4 :(得分:0)

这就是我最终做的事情:

package com.example.client;

import java.util.logging.Logger;

import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.core.shared.GWT;
import com.google.gwt.event.logical.shared.ValueChangeEvent;
import com.google.gwt.event.logical.shared.ValueChangeHandler;
import com.google.gwt.user.client.History;
import com.google.gwt.user.client.ui.RootPanel;

public class Controller implements EntryPoint {
    private static Controller instance;
    private static final Logger log = Logger.getLogger(Controller.class.getName());

    // I have a feeling GWT does not respect private constructors, or else it uses some other voodoo.
    private Controller(){}

    public static Controller getInstance() {
        if (instance == null) instance = new Controller();
        return instance;
    }

    @Override
    public void onModuleLoad() {
        String token = History.getToken();
        log.info("****************************** token:"+token);
        History.addValueChangeHandler(new ValueChangeHandler<String>() {
            @Override
            public void onValueChange(ValueChangeEvent<String> event) {
                navigate(event.getValue());
            } // onValueChange
        });
        if (token == null || token.length() == 0) History.newItem(Login.TOKEN); // no token
        else navigate(token); // restore app state
    }

    private static void navigate(String token) {
        RootPanel rootPanel = RootPanel.get("gwtApp");
        if (rootPanel.getWidgetCount() > 0) rootPanel.remove(0); // clear the page

        if (Login.TOKEN.equals(token)) {
            Login page = Login.getInstance();
            page.onModuleLoad();
        } else if (MainApp.TOKEN.equals(token)) {
            MainApp page = MainApp.getInstance();
            page.onModuleLoad(); // display the page
//          page.setAuthenticated(true);
//          page.setUsername(email);
        }

    }

} // Controller

在* .gwt.xml文件中:

<entry-point class='com.example.client.Controller' /> 

现在,当您想要转到新页面时:

History.newItem(Login.TOKEN);