将mgwt用于桌面和移动应用程序

将mgwt用于桌面和移动应用程序,gwt,mobile,mgwt,Gwt,Mobile,Mgwt,我有一个用GWT编写的应用程序。我希望能够提供同一应用程序的子集,以便在移动浏览器中打开站点时使用,并且一直将mgwt作为实现这一点的一种方法 我期望它能够工作的方式是,我将使用mgwt代码(带有一些逻辑共享)来扩充我现有的GWT应用程序项目,从而产生两个入口点。我的问题是,在给定一个html页面的情况下,如何管理它?我看到了中描述的方法,想知道这是否适用于mgwt,或者是否应该考虑另一种模式?谷歌代码上指向MobileWebApp的链接中的模式是正确的。基本上,您在GWT中有UI视图接口,它遵

我有一个用GWT编写的应用程序。我希望能够提供同一应用程序的子集,以便在移动浏览器中打开站点时使用,并且一直将mgwt作为实现这一点的一种方法


我期望它能够工作的方式是,我将使用mgwt代码(带有一些逻辑共享)来扩充我现有的GWT应用程序项目,从而产生两个入口点。我的问题是,在给定一个html页面的情况下,如何管理它?我看到了中描述的方法,想知道这是否适用于mgwt,或者是否应该考虑另一种模式?

谷歌代码上指向MobileWebApp的链接中的模式是正确的。基本上,您在GWT中有UI视图接口,它遵循GWT上推荐的MVP模式。然后,您可以根据可用的屏幕分辨率执行不同的UI视图实现。显然,您不希望桌面和移动设备上有相同的屏幕布局。因此,您需要针对不同的形状因素重新设计视图,然后根据设备的形状因素调用正确的实现。因为已经有了gwt应用程序,所以可以使用mgwt为mobile创建视图,并重用已经创建的代码。但是你仍然需要使用mgwt为移动设备创建新的视图,这不会是一个直接的替换。

我认为你不需要两个入口点。正如kiran上面所说的,您应该重用除视图组件之外的所有代码。在使用GWT活动和位置模块的情况下,视图组件应该与代码的其余部分完全解耦

在这种情况下,您可以使用与模块xml定义中的正确定义关联的GWT.create方法:

 <replace-with class="com.vv.xui.client.DesktopClientFactory">
        <when-type-is class="com.vv.xui.client.IClientFactory" />
        <when-property-is name="formfactor" value="desktop"/>
  </replace-with>
    <replace-with class="com.vv.xui.client.MobileClientFactory">
        <when-type-is class="com.vv.xui.client.IClientFactory" />
        <when-property-is name="formfactor" value="mobile"/>
  </replace-with>
//在您的入口点:

private IClientFactory clientFactory = GWT.create(IClientFactory.class);
//在模块xml定义中:

 <replace-with class="com.vv.xui.client.DesktopClientFactory">
        <when-type-is class="com.vv.xui.client.IClientFactory" />
        <when-property-is name="formfactor" value="desktop"/>
  </replace-with>
    <replace-with class="com.vv.xui.client.MobileClientFactory">
        <when-type-is class="com.vv.xui.client.IClientFactory" />
        <when-property-is name="formfactor" value="mobile"/>
  </replace-with>
其中IHomeView和ISearchView是桌面和移动版本实现的视图界面。在我的例子中,视图实现是实现关联视图接口的UiBinder组件

在DesktopClientFactory中,您将有如下内容:

public interface IClientFactory {

    IHomeView getHomeView();
    ISearchView getSearchView();
    ...
}
public class DesktopClientFactory implements IClientFactory {

private static final ISearchView searchView = new com.vv.xui.client.view.desktop.SearchView.SearchView();

    @Override
    public ISearchView getSearchView() {
        return searchView;
    }
...
}

这样,您就不需要移动和桌面的不同入口点,可以共享除视图组件之外的所有代码。

这个问题更适合程序员。stackexchange.com。在那里你可以问这样的“白板问题”(你在设计程序时可能会想知道的事情);堆栈交换更多的是针对某个特定代码段不能按预期工作的问题。这很有意义。感谢Kiran-我在mgwt中成功地按照这种模式取得了进展。感谢全面的演练