Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java GWT:举例说明地点、历史和MVP_Java_Gwt_Android Activity_Mvp_Gwt History - Fatal编程技术网

Java GWT:举例说明地点、历史和MVP

Java GWT:举例说明地点、历史和MVP,java,gwt,android-activity,mvp,gwt-history,Java,Gwt,Android Activity,Mvp,Gwt History,假设我想创建一个由两个简单“屏幕”组成的GWT应用程序: 在这个简单的例子中,用户在应用程序首次启动时看到的主菜单(他们转到特定的URL)-忘记登录屏幕等;及 当用户单击主菜单上的按钮时,取代主菜单的编辑首选项“页面”/屏幕/视图;此编辑首选项屏幕还有一个按钮,可将用户带回主菜单;因此 用户只需在主菜单和编辑首选项“页面”(这是GWT,所以它实际上是一个单页应用程序)之间来回切换一整天 因此,这方面的伪代码可能如下所示: public class MainMenuPresenter impl

假设我想创建一个由两个简单“屏幕”组成的GWT应用程序:

  • 在这个简单的例子中,用户在应用程序首次启动时看到的主菜单(他们转到特定的URL)-忘记登录屏幕等;及
  • 当用户单击主菜单上的按钮时,取代主菜单的编辑首选项“页面”/屏幕/视图;此编辑首选项屏幕还有一个按钮,可将用户带回主菜单;因此
  • 用户只需在主菜单和编辑首选项“页面”(这是GWT,所以它实际上是一个单页应用程序)之间来回切换一整天
因此,这方面的伪代码可能如下所示:

public class MainMenuPresenter implements Presenter {
    // mainMenuScreen may be a Composite that contains a Button for
    // switching/navigating to the EditPreferencesView
    private MainMenuView mainMenuScreen;
}

public class EditPreferencesPresenter implements Presenter {
    // editPrefsScreen may be a Composite that contains a Button for
    // switching/navigating back to the MainMenuView
    private EditPreferencesView editPrefsScreen;
}
问题:

  • 一个
    场所
    及其相关的
    活动
    如何适应这种范式?如果要在MVP和场所/活动之间进行选择,那么使用活动/场所范例,这个示例会是什么样子
  • 如果MVP和Activities/Places可以很好地结合在一起(并且不是相互排斥的),那么我们如何在这里实现GWT的History API,以便将
    MainMenuView
    设置为历史上的一个“位置”,将
    EditPreferencesView
    设置为第二个“位置”,然后允许用户点击后退/前进浏览器按钮并在它们之间切换
  • 如果MVP和活动/场所是互斥的,我必须在两者之间进行选择,那么上述代码#2是否有任何不同之处需要更改

  • 我还对
    地点
    如何与
    活动管理器
    相关联,以及如何/谁触发/处理
    地点更改事件
    ,感兴趣,但我会留到以后再说;我需要先了解这些概念,然后才能继续这些概念。提前谢谢

    我将尝试概述一个适用于您的情况的示例设置。有很多变化,但我想集中讨论一个简单的变化(并鼓励您考虑在哪里可以进行调整)

    1.定义URL标记 选择一些URL标记,如“#mainmenu”和“#editprefs”,它们将附加到主机页的URL。它们将用于浏览器历史记录,因此后退和前进按钮可以工作等

    URL处理将由DefaultHistorian自动为您完成。PlaceChangeEvent将由PlaceController触发

    2.映射标记以放置对象 Place对象只是令牌的面向对象抽象-这很有用,因为更高级的令牌也可以接受需要解析的参数。您需要一种将标记映射到放置对象的方法。这是PlaceHistoryMapper的责任

    在我的示例中,我们只需手动实现PlaceHistoryMapper,将“#mainmenu”映射到MainMenuPlace,并将“#editprefs”映射到EditPreferencesPlace

    [或者,也可以使用@WithTokenizers注释并为每种类型的位置实现(空)PlaceTokenizer。然后可以使用@Prefix注释指定“mainmenu”和“editprefs”作为标记。]

    3.绘制活动地点图 Place对象本身不做任何事情——正如上面所解释的,它基本上只是一个抽象标记。实际代码将在活动中运行。因此,您必须将位置映射到活动。这是ActivityMapper的责任

    在我的示例中,您将实现它以将MainMenuPlace映射到MainMenuActivity,并将EditPreferencePlace映射到EditPreferenceActivity

    4.活动和主持人 为简单起见,在我的示例中,活动还将实现Presenter。所以MainMenuActivity将实现MainMenuPresenter。这根本没有必要,但可能是一个很好的起点。这就是场所+活动可以与MVP连接的地方。这两个概念互不需要,但它们可以很好地协同工作:

    • Activities+Places基本上是关于历史标记和活动之间的连接
    • MVP基本上是演示者和视图之间的连接
    如果您让某个活动(或其一个代理)实现演示者,则您已将两者连接起来

    5.快速概述 “Activities and Places框架允许您在应用程序中创建可设置书签的URL,从而允许浏览器的后退按钮和书签按照用户的预期工作。它建立在GWT的历史记录机制之上,可以与MVP开发结合使用,但不是必需的。”文档在整个示例中使用MVP。
    "#mainMenu"
    ---(PlaceHistoryMapper)---> MainMenuPlace
    ---(ActivityMapper)---> MainMenuActivity implements MainMenuPresenter