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

时间:2014-04-12 12:20:03

标签: gwt mobile mgwt

我有一个用GWT编写的应用程序。我希望能够提供相同应用程序的子集,以便在移动浏览器中打开网站时使用,并且已经将mgwt视为实现此目的的一种方式。

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

2 个答案:

答案 0 :(得分:1)

我认为你不需要2个入口点。正如kiran所说,你应该重用除视图组件之外的所有代码。如果您使用了GWT Activities and Places模块,那么视图组件应该与其余代码完全分离。

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

//在您的入口点:

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>

form formfactor属性可以在此示例中定义: https://code.google.com/p/gwt-cx/source/browse/trunk/gwtcx/gwtcx-core/gwtcx-core-client/src/main/resources/com/gwtcx/FormFactor.gwt.xml

在您的IClientFactory中,您将拥有以下内容:

public interface IClientFactory {

    IHomeView getHomeView();
    ISearchView getSearchView();
    ...
}

其中IHomeView和ISearchView是桌面和移动版本实现的视图界面。在我的例子中,View实现是实现相关视图接​​口的UiBinder组件。

在您的DesktopClientFactory中,您将拥有以下内容:

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;
    }
...
}

通过这种方式,您不需要移动设备和桌面的不同入口点,并且可以共享除视图组件之外的所有代码。

答案 1 :(得分:0)

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