2012-05-23 61 views
0

我在下面一個簡單的場景中遇到的問題上GWT codeserver parameterGWT codeserver參數

項目結構

myapp 
+src 
++mypkg 
---MainWindow.gwt.xml 
---NextWindow.gwt.xml 
+++client 
----MainWindow.java 
----NextWindow.java 
+war 
--MainWindow.html 
--NextWindow.html 

MainWindow.gwt.xml

<?xml version="1.0" encoding="UTF-8"?> 
<module rename-to='mainwindow'> 
    <inherits name='com.google.gwt.user.User'/> 
    <entry-point class='mypkg.client.Mainwindow'/> 
    <source path='client'/> 
</module> 

MainWindow.java

package mypkg.client; 

import com.google.gwt.core.client.*; 
import com.google.gwt.event.dom.client.*; 
import com.google.gwt.user.client.ui.*; 

public class MainWindow implements EntryPoint { 
    @Override 
    public void onModuleLoad() { 
     Button button = new Button("NextWindow!"); 
     button.addClickHandler(new ClickHandler() { 
      @Override 
      public void onClick(ClickEvent event) { 
       Window.open("/NextWindow.html", null, null); 
      } 
     }); 
     RootPanel.get().add(button); 
    } 
} 

MainWindow.html

<!doctype html>  
<html> 
<head> 
<title>MainWindow</title> 
<script type="text/javascript" language="javascript" 
    src="mainwindow/mainwindow.nocache.js"></script> 
</head> 
<body> 
    <h1>Hi, MainWindow!</h1> 
</body> 
</html> 

NextWindow.gwt.xml

<?xml version="1.0" encoding="UTF-8"?> 
<module rename-to='nextwindow'> 
    <inherits name='com.google.gwt.user.User'/> 
    <entry-point class='mypkg.client.NextWindow'/> 
    <source path='client'/> 
</module> 

NextWindow.java

package mypkg.client; 

import com.google.gwt.core.client.*; 
import com.google.gwt.user.client.ui.*; 

public class NextWindow implements EntryPoint {  
    @Override 
    public void onModuleLoad() { 
     RootPanel.get().add(new Label("Hi, NewLabel!")); 
    } 
} 

NextWindow.html

<!doctype html>  
<html> 
<head> 
<title>NextWindow</title> 
<script type="text/javascript" language="javascript" 
    src="nextwindow/nextwindow.nocache.js"></script> 
</head> 
<body> 
    <h1>Hi, NextWindow!</h1> 
</body> 
</html> 

Devmode推出從編譯MYAPP李NK,

http://127.0.0.1:8888/MainWindow.html?gwt.codesvr=127.0.0.1:9997 

點擊按鈕 「NextWindow的」,然後GWT browser plugin彈出一個投訴窗口,

Module NextWindow need be (re)compiled! 

確認,然後一個新的瀏覽器窗口,是從Prodmode鏈接打開,

http://127.0.0.1:8888/NextWindow.html 

而不是所需的鏈接Devmode

http://127.0.0.1:8888/NextWindow.html?gwt.codesvr=127.0.0.1:9997 

因此它只顯示,

Hi, NextWindow! 

但是很期待下面的內容不會顯示出來,

Hi, NewLabel! 

如果我們落後GWT codeserver parameter?gwt.codesvr=127.0.0.1:9997的源代碼,這個問題可以解決通過犧牲DevmodeProdmode之間的source level的一致性。

確實有哪些更好的解決方案?

+1

您可以檢查您是在生產模式下還是在開發模式下運行。取決於你附加的代碼服務器參數。您可以使用GWT.isProdMode()檢查模式。 – Seshagiri

+0

謝謝,'@ MarioP'在下面給出了相同的答案。 – sof

回答

1

您可以使用if(GWT.isProdMode())來檢查Prodmode和Devmode,如果它是devmode則跟蹤該參數。

這不會影響生產模式 - gwt編譯器足夠聰明,可以忽略devmode-code,因此devmode-block永遠不會將它編入JavaScript。

+0

謝謝,這就是我需要的。有沒有對你的陳述有任何「官方」引用 - 「gwt編譯器足夠聰明,可以忽略devmode-code」。 – sof

+1

鑑於'GWT.isProdMode()'被硬編碼以在產品模式下返回'true',所以GWT編譯器將優化無法訪問的代碼,例如,一個'if(!GWT.isProdMode()){...}'的內容。這是編譯器完成的_standard_優化的一部分。 –

+0

謝謝,簡潔但令人信服。 – sof