GWT:如何创建新页面

发布于 2024-11-06 07:52:01 字数 45 浏览 0 评论 0原文

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

I have a GWT MVP application with one page. How can I create a new page and link to it?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

缺⑴份安定 2024-11-13 07:52:02

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

you can do one thing, at same page make different layouts and at particular action you can hide one layout and show other layout or component.

他是夢罘是命 2024-11-13 07:52:02

GWT 通过 URL 片段标识符 支持应用程序内的页面,即 http://www .yourhost.vom/main#pagename,其中“pagename”是代表应用内“页面”的片段标识符。

  1. 通过向您的主页添加 iframe 来启用历史记录支持

    
    
  2. 注册一个 ValueChangeHandler,以便在历史(页面)更改时收到通知。在此处理程序中,您放置一个显示新页面的逻辑。

  3. 通过调用 History.newItem("newpage") 转到特定页面

GWT has support for pages within application via URL fragment identifier, i.e. http://www.yourhost.vom/main#pagename, where "pagename" is a fragment identifier representing a "page" within your app.

  1. Enable history support by adding an iframe to your host page:

    <iframe src="javascript:''" 
            id="__gwt_historyFrame" 
            style="width:0;height:0;border:0">
    </iframe>
    
  2. Register a ValueChangeHandler to be notified when history (page) changes. Within this handler you put a logic that displays the new page.

  3. Go to a particular page by calling History.newItem("newpage")

如果没有 2024-11-13 07:52:02

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

使用它,您可以使用简单的 Java 注释来定义视图(由唯一 URL 标记引用的小部件)。该框架会为您处理代码分割,并隐藏所有样板代码。

下面是一个示例:

@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 跟踪和用户授权。

I created a open source, MIT licensed project to ease the page navigation handling in GWT. Take a look at the GWT Views project.

Using it you can define a View (a Widget referenced by an unique URL token) using simple Java annotations. The framework takes care of code-splitting for you, and hides all the boilerplate code.

Here is an example:

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

When using History.newItem(Login.TOKEN) the Login widget will be rendered at the page.

There are a lot of common use cases handled by the framework as well, such as ViewContainers, 404 pages, Google Analytics tracking, and user authorization.

凹づ凸ル 2024-11-13 07:52:02

这就是我最终所做的:

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);

This is what I ended up doing:

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

In your *.gwt.xml file:

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

Now when you want to go to a new page:

History.newItem(Login.TOKEN);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文