Java GWT活动和场所-如何理解这一概念?

Java GWT活动和场所-如何理解这一概念?,java,gwt,Java,Gwt,好的,活动建立在地方之上。地点“只是URL”。但我只是不明白如何正确使用它们 没有嵌套的活动“”;但在这个简单的场景中,它是什么样子的: 有一个登录页面 具有为用户提供功能的管理页面 将事件添加到我的公司 将项目添加到我的商店 成功登录后,网站的“主容器”将被清除并填充管理活动的新内容。这里必须更改的一件事是活动标签的“显示”,因为现在我在左侧有一个导航栏,在右侧有一个主内容Div 我只需要一个登录活动和一个管理员活动。这意味着我会有类似的URL /#LoginPlace:noParams

好的,活动建立在地方之上。地点“只是URL”。但我只是不明白如何正确使用它们

没有嵌套的活动“”;但在这个简单的场景中,它是什么样子的:

  • 有一个登录页面
  • 具有为用户提供功能的管理页面
    • 将事件添加到我的公司
    • 将项目添加到我的商店
  • 成功登录后,网站的“主容器”将被清除并填充管理活动的新内容。这里必须更改的一件事是
    活动标签的“显示”,因为现在我在左侧有一个导航栏,在右侧有一个主内容Div

    我只需要一个
    登录活动
    和一个
    管理员活动
    。这意味着我会有类似的URL

    /#LoginPlace:noParams
    /#AdminPlace:eventManager
    /#AdminPlace:itemManager
    
    但这是愚蠢的,因为我真的想要这样的东西:

    /#LoginPlace:noParams
    /#AdminPlace:eventManager|storeId=1,langaugeId=2
    /#AdminPlace:itemManager|storeId=1,langaugeId=2,page=0
    
    private AdministrationActivity administrationActivity;
    
    @Override
    public Activity getActivity(Place place) {
    
        if (place instanceof LoginPlace) {
            return new LoginActivity((LoginPlace) place);
        } else if (place instanceof AdministrationPlace) {
            if(this.adminActivity== null) {
                this.adminActivity= new AdministrationActivity((AdministrationPlace) place);
            } else {
                this.adminActivity.updateMainContent(((AdministrationPlace) place).getUrl());
            }
            return this.adminActivity;
        }
    
        return null;
    }
    
    但这需要我的
    AdminActivity
    来分解URL并查找所有这些不同类型的URL,对吗?我的意思是这样的:

    /#LoginPlace:noParams
    /#AdminPlace:eventManager|storeId=1,langaugeId=2
    /#AdminPlace:itemManager|storeId=1,langaugeId=2,page=0
    
    private AdministrationActivity administrationActivity;
    
    @Override
    public Activity getActivity(Place place) {
    
        if (place instanceof LoginPlace) {
            return new LoginActivity((LoginPlace) place);
        } else if (place instanceof AdministrationPlace) {
            if(this.adminActivity== null) {
                this.adminActivity= new AdministrationActivity((AdministrationPlace) place);
            } else {
                this.adminActivity.updateMainContent(((AdministrationPlace) place).getUrl());
            }
            return this.adminActivity;
        }
    
        return null;
    }
    
    现在,
    adminActivity.updateMainContent()
    必须对所有位置进行解析,才能显示正确的内容

    这就是解决方案:

    /#LoginPlace:noParams
    /#EventManagerPlace:storeId=1,langaugeId=2
    /#ItemManagerPlace:storeId=1,langaugeId=2,page=0
    
    但是,(!)现在我每个地方都需要一个活动,对吗?我只是不确定是否有同样多的地方和活动。我认为一项活动可以导航到不同的地方


    那么,应该如何使用场所和活动呢?

    我建议您可能希望每个场所都有一项活动。一般来说,一对一的关系很粗糙,但由于关注点的分离,它们被分开了,因此你可以在没有活动的情况下四处走动

    遗憾的是,标准GWT不支持添加参数。我们基于UrlBuilder创建了自己的简单应用程序

    这是一个长期存在的问题(旧问题追踪者),它有其他想法和链接


    一旦它启动并运行,它的工作非常好。我喜欢使用强类型对象和goTo,而不是将URL粘在一起。

    我建议您可能希望每个位置都有一个活动。一般来说,一对一的关系很粗糙,但由于关注点的分离,它们被分开了,因此你可以在没有活动的情况下四处走动

    遗憾的是,标准GWT不支持添加参数。我们基于UrlBuilder创建了自己的简单应用程序

    这是一个长期存在的问题(旧问题追踪者),它有其他想法和链接


    一旦它启动并运行,它的工作非常好。我喜欢使用强类型对象和goTo,而不是将URL粘在一起。

    首先要问自己的问题是“用户可能会去哪里?”。据我所知,您至少有:

    • 事件列表,包括可能的筛选/选择标准和分页属性
    • 项目列表,包括可能的筛选/选择标准和分页属性
    也许你也会有类似“事件细节”的地方(如果用户将在两种状态之间切换,甚至可能在只读细节和可编辑细节之间分割;如果状态取决于用户是谁,那么这是同一个地方,用户可以执行的操作也不同)、“项目细节”、“添加事件的表单”,“添加项目的表单”

    对我来说,登录是一个跨领域的功能,它不是用户在你的应用程序中要做的事情(它不是一个商业用例,也不是用户工作的一部分的“活动”)。但是你仍然可以选择使用一个地点和活动进行登录;因此,让我们将其添加到列表中:“登录表单”(当然不是我要做的,但这是另一个故事)

    现在,您可以选择如何将这些位置表示为GWT
    Place
    对象:您可以有一个
    Place
    子类,该子类的属性告诉您所处的确切“位置”(基本上是您的
    AdminPlace:eventManager
    令牌所建议的),或者每个“位置”有一个
    Place
    子类(您的
    EventManagerPlace
    令牌所建议的)。这完全独立于您是否将有一个或多个活动

    下一个问题是关于屏幕的各个区域,这些区域将映射到
    ActivityManager
    s:导航时屏幕的哪些部分会发生更改?可能它们不会在同一时间/相同条件下全部更改。
    例如,你的导航栏是否应该在活动中?如果你可以把它放在外面(因为它被重用),那么就去做。如果它总是一样的话,它实际上甚至不需要是一个活动(对所选项目进行模化)。在任何情况下,将其设置为单例(或类似)可能是一个好主意并收听
    PlaceChangeEvent
    s选择适当的项目(不一定是“单一项”,但至少不会在每个导航中重新创建)。将导航栏放在活动之外的好处是,如果您最终决定将其垂直放置而不是水平放置(或者相反),和/或可折叠,您不必更改您的活动(关注点分离)。如果您必须构建移动应用程序,您甚至可以在该应用程序上有一个“菜单”位置,显示导航栏全页,并在导航时将其替换为其他活动

    因此,我们现在有两个显示区域,即2个
    ActivityManager
    s,以及它们各自的
    ActivityMapper
    s。或者可能只有一个显示区域用于“主要内容”,导航栏不是一个活动。下一步是准确地确定更改的内容和时间;即,当我去放置X时,我需要在该区域中放置该东西,在该区域中放置另一东西;这些“东西”是您的活动

    对你的活动进行“建模”的关键是思考用户所做的事情(活动),并将注意力集中在其中一项上。但活动也与用户的行为方式有关