2010-08-04 40 views
1

所以,我從一個已經建立的代碼中得到了一個StringBuilder元素的返回參數,我需要將它插入到我的GWT應用程序中。這個StringBuilder元素在返回之前已被格式化爲表格。如何將一個StringBuilder元素插入GWT應用程序?

爲了更加清楚,下面是如何生成StringBUilder以及返回的代碼。

private static String formatStringArray(String header, String[] array, int[] removeCols) { 
    StringBuilder buf = new StringBuilder("<table bgcolor=\"DDDDDD\" border=\"1\" cellspacing=\"0\" cellpadding=\"3\">"); 

    if (removeCols != null) 
     Arrays.sort(removeCols); 

    if (header != null) { 
     buf.append("<tr bgcolor=\"99AACC\">"); 
     String[] tokens = header.split(","); 
     //StringTokenizer tokenized = new StringTokenizer(header, ","); 
     //while (tokenized.hasMoreElements()) { 
     for (int i = 0; i < tokens.length; i++) { 
      if (removeCols == null || Arrays.binarySearch(removeCols, i) < 0) { 
       buf.append("<th>"); 
       buf.append(tokens[i]); 
       buf.append("</th>"); 
      } 
     } 
     buf.append("</tr>"); 
    } 

    if (array.length > 0) { 
     for (String element : array) { 
      buf.append("<tr>"); 
      String[] tokens = element.split(","); 
      if (tokens.length > 1) { 
       for (int i = 0; i < tokens.length; i++) { 
        if (removeCols == null || Arrays.binarySearch(removeCols, i) < 0) { 
         buf.append("<td>"); 
         buf.append(tokens[i]); 
         buf.append("</td>"); 
        } 
       } 
      } else { 
       // Let any non tokenized row get through 
       buf.append("<td>"); 
       buf.append(element); 
       buf.append("</td>"); 
      } 
      buf.append("</tr>"); 
     } 
    } else { 
     buf.append("<tr><td>No results returned</td></tr>"); 
    } 

    buf.append("</table>"); 
    return buf.toString(); 
} 

因此,上述返回buf.toString();是在GWT類接收,添加到面板和顯示...現在的問題是:如何讓這一切發生?

我絕對無能,因爲我是一個新手,並會非常感謝任何幫助。

問候,
chirayu已

+0

爲什麼要從字符串創建HTML實體?您可以創建GWT UI小工具(在客戶端),並根據需要使用可讀的Java代碼構建它們。 – 2010-08-04 21:18:32

+0

@Eyal,感謝您的建議,我試圖使用已經編寫的代碼,它返回一個StringBuilder元素並將其集成到我正在做的GWT部分中。 現有的代碼有點複雜,我正在實習,很快完成,所以時間是一個限制。不管怎麼說,多謝拉。 – Chirayu 2010-08-05 14:01:11

回答

1

你能更具體,chirayu已? 「已經建立的代碼」(是一個serlvet?它運行在服務器端還是客戶端?),據推測返回StringBuilder,顯然返回String,可以通過GWT-RPC,JSON等輕鬆傳輸。
但是像Eyal所說的,「你做錯了」 - 你手工生成HTML代碼,這是額外的工作,導致了security holes(XSS等),並且更容易出錯。正確的方法是:

  • 代替生成視圖/ HTML代碼在服務器上(我假設上面的代碼在服務器上執行)的,你只要獲取的相關數據 - 通過any transport可用在GWT中
  • 在客戶端上,將來自服務器的數據放在一些漂亮的Widget中。如果您更願意直接使用HTML,請查看UiBinder。否則,舊的widgets, composites, etc方式也可以。

這樣可以最大限度地減少客戶端和服務器之間發送的數據,並獲得更好的分離效果(進一步查看MVP)。另外,服務器負載更少 - 雙贏。

爲了不再是一個新手,RTFM - 它就在那裏。請注意,我在這裏提供的所有鏈接都會導致官方文檔:)

+0

「爲了不再成爲新手」,你會做的很好,作爲一名心理治療師:D [雙關意圖] – 2010-08-05 07:07:23

+0

謝謝,阿什溫,總有一個備份計劃是好事;)我不介意幫助解決最簡單的問題,除非我看到詢問的人沒有做他/她的功課(jeez,我聽起來像一個老師)。另一方面,我有點嫉妒Chirayu,因爲他在GWT的實習過程中玩過:D(儘管我明白進入GWT中間會讓人感到困惑和沮喪 - 你想寫一個簡單的應用程序,突然你應該知道關於MVP,UiBinder,不同的傳輸,安全隱患,優化技巧等...) – 2010-08-05 10:21:42

+0

@Ashwin,我希望我能破解一個討厭的雙關語,但可惜我是一個新手(閱讀:屁股),你是一個專家。 @Igor,我還沒有完成我的功課,但那是因爲時間的限制,我是一名C/C++開發人員,在實習時被拋入java開發環境,已經存在的代碼,其中一部分我'整合GWT。可悲的是我被卡住了,還剩7天,試圖收拾東西,並感到困惑。 – Chirayu 2010-08-05 13:55:29

相關問題