标签: gwt-places

围绕整个GWT MVP与活动和场所的混乱

阅读一段时间并观看Google IO视频后,我仍然对MVP与Activity和Places的关系感到困惑.

我找到了一段时间发布的帖子 - > GWT 2.2 MVP vs. GWT 2.1 Activities-Places

"MVP架构.MVP是概念,其中一个方法就是场所 - 活动框架"

我还听到"演示者类似于活动"

我们可以给出"没有MVP的活动和场所"

我们可以混合"活动和地方与MVP"

"MVP只不过是我们如何组织我们的项目,以便我们可以轻松地测试和组织代码"

然后我想弄清楚这样的东西 - > http://code.google.com/p/gwt-platform/

我真的很困惑.我想要一站式线程来结束所有的混乱.

mvp gwt gwt-activities gwt-places

21
推荐指数
3
解决办法
7273
查看次数

如何:UiBinder + GWT MVP +多个独立显示区域

我正在使用GWT MVP和UiBinder来创建一个带有DockLayoutPanel的应用程序.我希望南北码头是静态的,包含按钮和链接.我希望在中心和东部码头的两个不同区域拥有动态视图.由于这些动态区域应该彼此独立,我为每个动态显示区域设置不同的ActivityMapper和ActivityManager; 中心,东顶和东底.

如何在加载应用程序时独立初始化这3个不同的显示区域?如何在一个显示区域中从一个Activity切换到另一个Activity而不影响其他区域?

当我使用PlaceController的goTo在一个区域中从一个地方切换到另一个地方时,另一个区域的活动停止.

五月天,请帮忙,五月天!

以下是我的一些代码:

AppViewImpl.ui.xml

<g:DockLayoutPanel styleName="{style.dockPanel}" unit="PX" width="975px" height="100%">

    <!-- DOCK PANEL EAST -->
    <g:east size="220">
        <g:LayoutPanel styleName="{style.eastPanel}">
            <g:layer left="0px" width="220px" top="0px" height="105px">
                <g:SimpleLayoutPanel ui:field="topRightPanel"/>
            </g:layer>

            <g:layer left="0px" width="220px" top="110px" height="340px">
                    <g:InlineLabel styleName="{style.label}" text="ANOTHER DISPLAY AREA"/>
            </g:layer>
        </g:LayoutPanel>
    </g:east>

    <!-- DOCK PANEL NORTH -->
    <g:north size="110">
        <g:LayoutPanel styleName="{style.northPanel}">
            <g:layer left="0px" width="755px" top="0px" height="105px">
                    <g:InlineLabel styleName="{style.label}" text="NORTH PANEL"/>
            </g:layer>
        </g:LayoutPanel>
    </g:north>

    <!-- DOCK PANEL SOUTH -->
    <g:south size="20">
        <g:LayoutPanel styleName="{style.southPanel}">
            <g:layer left="0px" width="755px" top="0px" height="20px">
                    <g:InlineLabel styleName="{style.label}" …
Run Code Online (Sandbox Code Playgroud)

gwt uibinder gwt-mvp gwt-activities gwt-places

8
推荐指数
1
解决办法
3925
查看次数

摆脱GWT MVP样板

关于地点和活动+ MVP的文档,我必须为每个页面创建:

  • 一个地方
  • 一个活动
  • 一个标记化器(我必须实现标记化逻辑)
  • 演示者的界面(活动实现此界面)
  • 视图的界面
  • 视图实现
  • 用于视图实现的ui binder xml
  • app活动映射器中的节点
  • gin模块中的节点,用于绑定视图接口以查看实现

我创建了一个具有基本功能的应用程序(5页和导航栏),我已经有超过1500行代码和~40个文件.我认为这是完全不可维护的,但是我没有找到任何解决这个问题的方法.有几个框架(例如GWTP)实现了MVP,但它们也需要相同数量的样板.

我可以使用spring mvc或play在~200行中实现相同的功能.

我做错了什么,你会如何解决?

java mvp gwt gwt-mvp gwt-places

7
推荐指数
1
解决办法
711
查看次数

GWT - 将演示者的角色与活动分开

剥夺演示者从活动中的角色可以获得哪些优势?

为了剖析作为演示者的活动,可以分离哪些角色/关注点?

你为什么要把它们分成两个不同的问题?

在什么情况下不统一它们是否有意义?

举例,利弊.

java mvp gwt gwt-activities gwt-places

6
推荐指数
1
解决办法
768
查看次数

GWT MVP更新地方变更的活动状态

在地方变更上更新活动状态的最佳做法是什么?想象一下,您有一个带有视图的活动,该活动显示类别列表和类别中的项目列表.如果选择了不同的类别,则应用程序将转到具有类别ID的新位置.我想要只刷新项目,而不是创建也重新读取类别列表的新活动.

我目前的做法是这样的:

public class AppActivityMapper implements ActivityMapper {

    private ItemListActivity itemListActivity;

    ...

    public Activity getActivity(final Place place) {
        final Activity activity;

        if (place instanceof ItemListPlace) {
            if (itemListActivity == null) {
                itemListActivity = new ItemListActivity((ItemListPlace) place, clientFactory);
            } else {
                itemListActivity.refresh((ItemListPlace) place);
            }
            activity = itemListActivity;
        } else {
            itemListActivity = null;
        }

        ...
        return activity;
    }

    ...
Run Code Online (Sandbox Code Playgroud)

mvp gwt gwt-mvp gwt-activities gwt-places

6
推荐指数
1
解决办法
2859
查看次数

GWT:场所和ActivityMappers的粒度

我终于开始"获得"GWT了.在任何时候,PlaceChangeEvent都可以在应用程序上触发EventBus:

History.newItem("token-for-some-new-place");
Run Code Online (Sandbox Code Playgroud)

这增加了该事件的总线,因此注册ActivityManager舀起来,并咨询其内部ActivityMapper给它Activity与相关PlaceChangeEventPlace.

所述Activity(类似于从MVP/MVC演示者或控制器对象),则获得所需要的任何数据(通过RPC调用向服务器),并且执行任何业务逻辑和配置的最终视图(通常是Composite某种形式的)来显示.

只要我们谈论的是一个超级简单的GWT应用程序,它的主页上只有一个显示区域,那么就像我说的那样,我"得到"它.

我现在窒息的地方是当你有一个包含多个显示区域的应用程序(可以彼此异步更新的区域)时会发生什么.

所以我问:

  1. ActivityMapper应该是多么精细?是否有一个应用程序范围AppActivityMapper将所有Places 映射到所有的Activity,或者是否应该有某种ActivityMapper层次结构/分解,你有多个映射器?(如果您对此的回答类似于" 这取决于您的应用程序的需求 ",那么请解释哪些要求/需求驱动适当的粒度级别!)
  2. 如果a Place表示应用中的URL令牌(为了使其成为Place可收藏状态),那么当您拥有一个具有多个显示区域(D1,D2,D3)的更复杂应用时会发生什么.一个URL令牌(即http://myapp.com/#token-for-some-new-place)如何映射到D1,D2和D3?这不意味着ActivityMapper#getActivity必须能够返回一个活动列表(List<Activity>),其start(AcceptsOneWidget, EventBus)方法将被调用吗?

感谢您的帮助 - 代码示例总是摇滚.

java mvp gwt gwt-activities gwt-places

5
推荐指数
1
解决办法
455
查看次数

解读GWT场所/活动和MVP?

我知道地方和活动与MVP是分开的.P&A用于管理浏览器历史记录,MVP是一种架构模式.但是,显然,它们在区域中交错和重叠,而这个问题是关于它们如何能够团结一致地协同工作.

我刚刚读了GWT Places&Activites,并推荐了MVP结构,我的头脑正在旋转.我需要有人确认我有基本的想法.

A PlaceHistoryHandler既有a PlaceController又有PlaceHistoryMapper.当您在浏览器地址栏中输入特定URL时,PlaceHistoryHandler使用它PlaceHistoryMapper来确定Place应将其传递给它PlaceController.的PlaceController,反过来,触发一个适当的PlaceChangeEventEventBus.

一个或多个ActivityManagers正在总线上监听这些PlaceChangeEvents,并将这些Places 映射到a Activity,这应该是MVP架构中的Presenter组件.

返回的具体Activity(演示者)应该具有实现的模型注入视图(通常是UiBinder)AcceptsOneWidget.AcceptsOneWidget然后启动(via Activity#start(...))此组件,GWT - 自动 - 将其内容呈现给浏览器.

我所说的任何不正确,误导或误解的东西?如果是这样,请纠正我.基于这种理解,很多代码即将编写......

java mvp gwt gwt-activities gwt-places

5
推荐指数
1
解决办法
2423
查看次数

URL片段作为SAML令牌身份验证的一部分丢失; 变通方法/标准模式?

一些Web应用程序身份验证协议(如WS-Federation和SAML协议,即所谓的"被动"协议,以及显然也是ASP.NET Forms身份验证,请参阅此StackOverflow问题,以及AppEngine,请参阅此GWT错误评论)丢失原始的'URL片段',即#-sign之后的部分.

会发生什么大致如下:在干净的浏览器中(所以没有缓存的信息/ cookie /登录信息)我打开URL(1)http://example.com/myapp/somepage?some=parameter#somewhere.这使浏览器请求(2)http://example.com/myapp/somepage?some=parameter,服务器将我重定向到我的身份提供者(包括身份验证请求中的URL(2)),最终我被重定向回到我来自的地方,即URL(2):这是服务器知道的唯一URL.但是我想去URL(1),并且URL片段('anchor')在此过程中已经丢失,实际上已经是第一步了.

这似乎是这些协议的基本限制,因为服务器根本不会看到URL片段.

我知道根据规范,浏览器从服务器请求(2),当我导航到(1)时,导致这个片段丢失限制SAML协议,WS-Federation等.我的问题是:怎么做我解决这个限制?

显而易见的解决方法是避免URL碎片,如本答案中所述.但是,对于我们的特定Web应用程序并不好,因为我们在单页GWT应用程序中使用可收藏的URL片段,以确保我们的应用程序中的导航不会导致页面重新加载.

我的问题:这种情况还有哪些其他解决方法或标准模式?

(我对GWT + SAML协议解决方案特别感兴趣.)

gwt uri-fragment saml-2.0 ws-federation gwt-places

5
推荐指数
1
解决办法
1844
查看次数

多个GWT ActivityManagers和ActivityMappers的用途是什么?

终于发生,我认为你应该编写了一个ActivityMapper解析/检查Place,其子类getActivity(Place)方法传递,并返回相应的Activity呈现给用户.

所以这让我思考:Place在你的应用程序中需要许多不同的子类是有道理的,每个子类代表一个不同的可收藏的URL /状态.

但为什么一个应用程序需要超过1 ActivityManagerActivity Mapper?似乎没有GWT强加的限制哪个Place被映射到哪个Activity......

我听说过每个显示区域都有自己的策略ActivityManager.看起来像我这样只是让你的项目更复杂而没有提供任何真正的好处.提前致谢!

java gwt gwt-activities gwt-places

4
推荐指数
1
解决办法
1086
查看次数

GWT场所/活动 - 应该用于导航?

我有一个GWT位置/活动Web应用程序.我使用Anchorclick事件将用户移动到一个新的"地方",因此用户无法在新窗口或标签中打开任何"链接".问题是 - 如何让所有这些链接变为现实?

java anchor gwt gwt-activities gwt-places

2
推荐指数
1
解决办法
1032
查看次数

GWT活动/场所应该是单身人士还是原型?

这之间有什么区别(性能和其他):

public class MyPlaceMapper implements PlaceHistoryMapper {
    @Override
    public String getToken(Place place) {
        if(place instanceof HomePlace)
            return "home";
        else
            return null;
    }

    @Override
    public Place getPlace(String token) {
        if(token.equals("home"))
            return new HomePlace();
        else
            return null;
    }
}
Run Code Online (Sandbox Code Playgroud)

和:

public class MyPlaceMapper implements PlaceHistoryMapper {
    // Singleton HomePlace to inject and reuse over and over again
    private HomePlace homePlace;

    // Getter/setter for homePlace...

    @Override
    public String getToken(Place place) {
        if(place instanceof HomePlace)
            return "home";
        else
            return null;
    }

    @Override
    public Place …
Run Code Online (Sandbox Code Playgroud)

java gwt singleton gwt-activities gwt-places

1
推荐指数
1
解决办法
874
查看次数