gwt - 使用 GXT 时存在大量 GWT 排列

标签 gwt war

通过编译该项目,我得到了疯狂数量的排列。 如果我设置选项:

<set-property name="user.agent" value="gecko1_8" />

我得到:编译1008种排列

如果我设置:

<set-property name="locale" value="de"/>
<set-property name="user.agent" value="gecko1_8" />

我得到:编译 36 个排列

这是完整的.gwt.xml

<!-- Inherit the core Web Toolkit stuff. -->
<inherits name='com.google.gwt.user.User' />

<!-- We need the JUnit module in the main module, -->
<!-- otherwise eclipse complains (Google plugin bug?) -->
<inherits name='com.google.gwt.junit.JUnit' />

   <!-- GXT Theme -->
<inherits name='com.sencha.gxt.theme.gray.Gray' />

<!-- caneldar -->
<inherits name='com.bradrydzewski.gwt.calendar.Calendar' />
<inherits name='com.bradrydzewski.gwt.calendar.theme.google.Google' />
<inherits name='com.allen_sauer.gwt.dnd.gwt-dnd' />

<!-- Other module inherits -->
<inherits name="com.google.gwt.json.JSON" />
<inherits name='com.google.gwt.visualization.Visualization' />
<inherits name='com.chap.links.Timeline' />

<!-- Locale -->
<inherits name="com.google.gwt.i18n.I18N"/>
<set-property name="locale" value="de"/>
<set-property name="user.agent" value="gecko1_8" />

什么可能导致大量排列?

最佳答案

看起来您正在使用 GXT(来自 Gray 继承语句),但实际上并未继承 GXT本身(setup.txt 中的第三步)。这不一定是一件坏事,但避免该声明意味着您将跳过一些限制可能的排列数量的设置。将其添加到您的 Gray 之前行:

<inherits name='com.sencha.gxt.ui.GXT'/>

然后,除了user.agent =gecko1_8 ,添加此替代(或补充)以限制 GXT 排列(更多内容见下文):

<set-property name="gxt.user.agent" value="gecko1_9" />

(请注意,我们引用 Gecko 1.9 而不是 1.8,因为 1.8 中至少存在一个错误,我们有解决方法,但 1.9 中不需要。)

<小时/>

为什么GXT添加额外的属性,而不是使用user.agent

事实证明user.agent无法轻松扩展 - fallback系统对现有的CssResource没有任何帮助声明。这意味着,如果 GXT 添加了 ie10 排列(它在 3.0 中做到了),或者想要有一个独特的 ie7 排列(而不是与 ie6 混为一谈),或者单独的 Chrome 与 Safari 排列(有人遇到 chrome 缩放问题吗?),我们可能会破坏项目中的现有代码。

此外,GXT 添加了“os”属性来让我们处理平台问题。这可以是“mac”、“linux”或“windows”(或 3.0.3 之后的“未知”,以处理 Solaris、Chrome OS 等)。需要这样做的情况并不多,但一个例子包括 native OS X 复选框,一旦单击它们,它们就会变得模糊,这与 Mac 上的 Windows、Linux 或 Firefox 不同。

为什么我不需要设置user.agent如果我设置 gxt.user.agent

由于 GXT 用户代理属性集比 GWT 用户代理更广泛,因此我们根据 GXT 用户代理设置使用以下行设置 GWT 用户代理:

<!-- From /com/sencha/gxt/core/Core.gwt.xml about line 110 -->
<!-- Restrict the permutation explosion -->
<set-property name="user.agent" value="ie6">
  <any>
    <when-property-is name="gxt.user.agent" value="ie6" />
    <when-property-is name="gxt.user.agent" value="ie7" />
  </any>
</set-property>
<set-property name="user.agent" value="ie8">
  <when-property-is name="gxt.user.agent" value="ie8" />
</set-property>
<set-property name="user.agent" value="ie9">
  <any>
    <when-property-is name="gxt.user.agent" value="ie9" />
    <when-property-is name="gxt.user.agent" value="ie10" />
  </any>
</set-property>
<set-property name="user.agent" value="gecko1_8">
  <any>
    <when-property-is name="gxt.user.agent" value="gecko1_8" />
    <when-property-is name="gxt.user.agent" value="gecko1_9" />
  </any>
</set-property>
<set-property name="user.agent" value="safari">
  <any>
    <when-property-is name="gxt.user.agent" value="safari3" />
    <when-property-is name="gxt.user.agent" value="safari4" />
    <when-property-is name="gxt.user.agent" value="safari5" />
    <when-property-is name="gxt.user.agent" value="air" />
    <when-property-is name="gxt.user.agent" value="chrome" />
  </any>
</set-property>
<set-property name="user.agent" value="opera">
  <when-property-is name="gxt.user.agent" value="opera" />
</set-property>

GXT.gwt.xml 如何限制排列数量,我该如何自己实现?

除非采取措施限制这些属性,否则 13 个浏览器属性乘以 3 个操作系统应该会给出大约 39 种排列。默认情况下,GXT.gwt.xml 将这些限制为基本的 6 种排列,其中包含以下几行:

<collapse-property name="user.agent.os" values="*" />
<collapse-property name="gxt.user.agent" values="air, safari*, chrome" />
<collapse-property name="gxt.user.agent" values="ie6, ie7" />
<collapse-property name="gxt.user.agent" values="ie9, ie10" />
<collapse-property name="gxt.user.agent" values="gecko*" />

通过继承GXT,您有机会设置自己的排列限制。如果您不想自己设置这些,请继续继承 GXT 本身。更多信息请使用<collapse-property><collapse-all-properties />可以在http://code.google.com/p/google-web-toolkit/wiki/SoftPermutations找到

关于gwt - 使用 GXT 时存在大量 GWT 排列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19481625/

相关文章:

java - 如何在 eclipse 中将 .war 文件作为 java web 项目依赖项包含在内?

java - 有 2 个项目的 Eclipse WAR?

java - 捕获所有 Tomcat (GWT) servlet 中所有未处理异常的最佳方法

gwt - 如何将 SuperDevMode 与 Maven 一起使用

java gwt编译部署慢

java - GWT 中的 MVP。复杂的观点

java - 如何在 Java Servlet 中执行 DELETE 和 PUT 方法

java - Maven WAR 插件 - 更改前端资源位置

java - 从 war 文件中读取 list 文件会在 tomcat 7 中产生错误

java - 如何在 GWT 中测试生成器?