Java 容器标签id的名称有什么关系?

Java 容器标签id的名称有什么关系?,java,google-app-engine,gwt,ant,Java,Google App Engine,Gwt,Ant,我正在编写一个GWT/GAE(Java)应用程序。GWT附带的自动生成hello word示例生成如下代码: <table align="center"> <tr> <td colspan="2" style="font-weight:bold;">Please enter your name:</td> </tr> <tr> <td id="nameFieldContainer">

我正在编写一个GWT/GAE(Java)应用程序。GWT附带的自动生成hello word示例生成如下代码:

<table align="center">

  <tr>
    <td colspan="2" style="font-weight:bold;">Please enter your name:</td>
  </tr>

  <tr>
    <td id="nameFieldContainer"></td>
    <td id="sendButtonContainer"></td>
  </tr>
final Button sendButton = new Button("Send");
final TextBox nameField = new TextBox();
nameField.setText("GWT User");
我添加了一个container字段,以显示我可以使用HTML元素someStuffContainer以编程方式添加链接。我还添加了另一个字段,通过对注销URL的RPC服务的调用来填充:logoutUrlContainer。(是的,我现在知道有一种更简单的方法来实现这一点:。我只是想看看我是否能让它工作。)注意,someStuffContainer只是为了让这成为一个受控实验:将URL的编程添加与使用服务器端生成的注销链接填充该URL分开;这将与下文相关

  <tr colspan="2">
    <td id="someStuffContainer"></td>
  </tr>
  <tr colspan="2">
    <td id="logoutUrlContainer"></td>
  </tr>
我是一个相当有经验的程序员:我一定要复制和粘贴,以便字符串匹配。我使用emacs中的搜索功能进行了检查。我用ant clean来清理整个项目。我使用grep对整个项目中的任何二进制文件(比如类文件)进行grep处理,这些文件可能被ant clean遗漏了,但不知何故仍然包含旧名称。我重新启动了服务器,关闭了包含应用程序的浏览器选项卡,等等。我重复了所有这些。我反复得到空指针异常。我想我做了一次又一次,至少一个小时。请注意,someStuffContainer始终工作;不知何故,RootPanel.get()总是找到它,而没有找到userStatusContainer。最后,在绝望中,我又重新命名了容器字符串。它立刻就起作用了。我登记了

到底发生了什么事?ant clean遗漏了什么吗?这是我的ant clean目标,我扩展了自己:

  <target name="clean" description="Cleans this project">
    <delete  dir="gwt-unitCache" failonerror="false" />
    <delete  dir="war/myapp" failonerror="false" />
    <delete  dir="war/WEB-INF/classes" failonerror="false" />
    <delete  dir="war/WEB-INF/lib" failonerror="false" />
    <delete  dir="war/WEB-INF/deploy" failonerror="false" />
    <delete file="war/WEB-INF/appengine-web.xml" failonerror="false" />
    <delete file="war/WEB-INF/web.xml" failonerror="false" />
  </target>

我没有删除所有war/WEB-INF的唯一原因是我使用可选的app.yaml来配置Java Google app Engine,而不是自己编辑.xml文件

我的蚂蚁目标是不是遗漏了什么?这种经历真的让我不想使用GWT


更新:我想我知道发生了什么:javascript正在重新编译,但我从未想到GWT开发插件会允许缓存页面。后来我更改了欢迎文件列表,旧的欢迎文件仍在显示。研究配置文件,我想不出任何可能的方法。最后,我只需点击“重新加载”,新文件就会显示出来

无论如何,缓存可以解释这个问题中报告的错误。我不知道GWT允许缓存页面做了什么,尤其是在devmode中。你认为在断断续续地做了15年的web开发人员之后,我可能早就想到了这一点。然而,我无法想象人们对缓存效果如此草率,尤其是在开发框架中


我正在运行OS X 10.6.8(x86)的最新版本。 我的浏览器是Chrome:16.0.912.63(官方版本113337) $java-版本 java版本“1.6.0_29” Java(TM)SE运行时环境(构建1.6.0_29-b11-402-10M3527) Java HotSpot(TM)64位服务器虚拟机(构建20.4-b02-402,混合模式) 我正在使用gwt-2.4.0

它似乎进入了一种状态,不断地抱怨应用程序需要重新编译,而你无法摆脱这种状态

这与您正在调试有关,因此Dev模式会用更新的版本重写一些已编译的文件,当您没有重新编译(并且不是在Dev模式下启动应用程序)时,它会注意到缺少的文件并停止。如果要使用开发模式,请将
?gwt.codesvr=…
附加到新页面的url,它也将在开发模式下运行该页面。或者编译应用程序,并且不要在开发模式下使用任何页面(加载该模块-其他模块都可以)

我怀疑如果您将该后缀添加到url,您的整个问题将消失-如果
RootPanel.get(“some id”)
与html页面不匹配,您看到的NPE是由于
RootPanel.get
返回null,并且
add
被调用为null

RootPanel.get("logoutUrlContainer").add(userStatusHTML);
  <target name="clean" description="Cleans this project">
    <delete  dir="gwt-unitCache" failonerror="false" />
    <delete  dir="war/myapp" failonerror="false" />
    <delete  dir="war/WEB-INF/classes" failonerror="false" />
    <delete  dir="war/WEB-INF/lib" failonerror="false" />
    <delete  dir="war/WEB-INF/deploy" failonerror="false" />
    <delete file="war/WEB-INF/appengine-web.xml" failonerror="false" />
    <delete file="war/WEB-INF/web.xml" failonerror="false" />
  </target>