gwt活动和场所中的嵌套活动和历史记录

gwt活动和场所中的嵌套活动和历史记录,gwt,Gwt,我有一个应用程序设计如下。 这是一个旅行报销应用程序。它有两个选项卡: 我的报销:显示迄今为止提出的所有报销报销申请 我的帐户:显示我的详细信息 左侧有索赔数量,选中时在右侧显示条目 我有以下意见 AppView:用于具有选项卡面板和选项卡的整个应用程序 MyAccountsView:用于MyAccount选项卡下的内容。 MyClaims视图:用于MyClaims选项卡下的内容。这有两个面板。左边的那个装满了索赔单。在选择要查看的索赔之前,右侧为空。 SelectedClaimView:右侧面

我有一个应用程序设计如下。 这是一个旅行报销应用程序。它有两个选项卡:

我的报销:显示迄今为止提出的所有报销报销申请 我的帐户:显示我的详细信息 左侧有索赔数量,选中时在右侧显示条目

我有以下意见

AppView:用于具有选项卡面板和选项卡的整个应用程序 MyAccountsView:用于MyAccount选项卡下的内容。 MyClaims视图:用于MyClaims选项卡下的内容。这有两个面板。左边的那个装满了索赔单。在选择要查看的索赔之前,右侧为空。 SelectedClaimView:右侧面板,显示所选索赔的索赔。。 每个视图都有相应的位置和活动

以下是我在创建应用程序时遇到的困难:

当我单击左侧面板上的索赔时,右侧面板必须在selectedClaimView中显示索赔条目。当我单击另一个索赔时,列表必须由该索赔的内容填充。我还需要此索赔选择的历史支持

我在设计时面临以下问题:

如何添加嵌套活动。e、 g.当我选择MyClaimsTab时,所有索赔必须加载到左侧面板中。在选择索赔时,索赔条目必须通过所选索赔视图加载到右面板中。但是,调用活动并更改位置会停止调用活动

此外,两个选项卡中的活动必须同时运行,并且必须在选项卡切换之间维护历史记录。这是我不知道该怎么做的事情,如果你能给我一些建议,我将不胜感激


我希望我能给你指出正确的方向

有无数种实现逻辑的方法。我建议大家阅读一下命令设计模式googleit,你会发现很好的资源

如果您指的是浏览器历史记录,请参见。 如果你的意思是简单地记住用户选择的选项。然后简单地编写你自己的类,记住它,这也可能有助于你1


您的需求非常简单,您的设计也应该如此。您只需要两个活动和两个视图:AccountView和ClaimsView

您需要一个简单的小部件-一个带有两个标签样式为选项卡的FlowPanel-作为您的导航菜单。您将此小部件放在两个视图的顶部,并将ClickHandler附加到与另一个视图相对应的标签上,即在AccountView中,将处理程序附加到索赔标签上,从而触发presenter.goTonew ClaimsTab。索赔标签应在ClaimsView中设置为按下的选项卡,在AccountView中设置为帐户标签。这需要注意导航:不需要特殊的活动

AccountView很简单:导航小部件位于顶部,详细信息如下。对于ClaimsView,使用布局面板分为三层:顶层用于导航小部件,左侧用于声明,右侧用于详细信息。让我们假设您使用一个用于索赔的树,使用一个包装在ScrollPanel中的FlowPanel claimDetailsPanel用于索赔详细信息

您的ClaimsView应该有一个用getter和setter初始化的标志。当用户来到ClaimsTab地点时,您开始您的ClaimsActivity。此活动获取对ClaimsView的引用。它检查ClaimsView是否已初始化。如果不是,则加载索赔列表并填充索赔树。构建树时,将每个声明设置为每个树项的用户对象。然后将initialized标志设置为true

将选择处理程序附加到调用presenter.goTonew ClaimsTabselectedClaim.getId.toString的树

这会将用户发送回同一个选项卡,但带有一个新的URL标记-如果所选的claim had id=123,您将看到ClaimsTab:123标记。屏幕上不会闪烁,因为ClaimsView已经构建并保持可见

现在,您将运行一个新的ClaimsActivity。此活动注意到a有一个令牌需要处理,b由于视图已初始化,因此无需加载索赔并填充索赔树。您的活动应该解析令牌,将其转换为索赔id,加载此索赔的详细信息,并将此信息提供给ClaimsView以填充claimDetailsPanel,您应该首先清除该claimDetailsPanel,因为它可以包含上一个索赔的内容

一个小细节。用户可以为任何声明添加书签。因此,如果您的ClaimsActivity构建了索赔树,它应该检查令牌。书签页面将有一个标记,因此活动应该告诉视图选择哪个树项目

就是这样:两种观点,两种活动。没有嵌套。

该框架允许您轻松完成此操作。免责声明:我写道。让我描述一个简单的方法来做你想做的事。您可以这样定义主AppPlace:

public class AppPlace extends SlottedPlace {
    public static final Slot TabsSlot = new Slot(new AppPlace(), new MyClaimsPlace());

    @Override public Slot getParentSlot() {
        return SlottedController.RootSlot;
    }

    @Override public Slot[] getChildSlots() {
        return new Slot[] {TabsSlot};
    }
}
这告诉SlottedFramework,您的AppPlace有一个插槽,可以在当前视图中包含另一个活动

在AppActivity中,您需要将 nd SLOTTED替换并覆盖此方法:

@Override public void setChildSlotDisplay(Slot slot) {
    slot.setDisplay(tabsSlotWidget);
}
tabsSlotWidget是一个SimplePanel或SimpleLayoutPanel,将用作新活动的容器。AppPlace中可以有两个插槽,MyClaimsPlace中也可以有插槽。有一个SlottedTab小部件,它提供与TabPanel类似的功能,但允许每个选项卡成为一个活动

除上述更改外,活动的工作方式与GWT A&p相同。您还可以在Slotted内运行现有的A&p站点,并且只升级需要嵌套的活动

这允许同时启动多个活动,这是常规GWT A&p不允许的。如果您调用一个位置,即活动中处于同一级别的位置,它将只替换该活动,并且仍然保持层次结构的其余部分

Slotted将处理整个层次结构的历史记录,因此无论嵌套的级别/宽度有多少,历史标记都将允许重新创建它


“必须在选项卡切换之间维护历史记录”这是什么意思?更改选项卡后,您希望“后退”按钮做什么?当我切换选项卡并按下“后退”按钮时,它必须将上一个选项卡显示为活动选项卡,并且位置标记必须相应地更改。