如何将StringBuilder元素插入GWT应用程序?

时间:2010-08-04 21:11:40

标签: java gwt

所以,我从已经建立的代码StringBuilder元素获取返回参数,我需要将它插入到我的GWT应用程序中。在返回之前,此StringBuilder元素已格式化为表格。

为了更加清晰,以下是生成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课程中收到,添加到面板并显示......现在问题是:如何实现所有这些? < / p>

我非常无能为力,因为我是新手,非常感谢任何帮助。

的问候,
chirayu已

1 个答案:

答案 0 :(得分:1)

你能说得更具体吗,Chirayu? “已经建立的代码”(是一个serlvet?它是在服务器端还是在客户端运行?),它应该返回StringBuilder,显然会返回一个String,可以通过GWT轻松传输RPC,JSON等。
但就像Eyal所说,“你做错了” - 你手工生成HTML代码,这是额外的工作,导致security holes(XSS等)并且更容易出错。正确的方法是:

  • 而不是在服务器上生成视图/ HTML代码(我假设上面的代码在服务器上执行),您只需通过GWT中提供的any transport获取相关数据
  • 在客户端上,将服务器中的数据放在一些不错的小部件中。如果您希望直接使用HTML,请查看UiBinder。否则,旧的widgets, composites, etc方式也可以。

这样,您可以最大限度地减少客户端和服务器之间发送的数据,并获得更好的分离(更进一步,请查看MVP)。此外,服务器上的负载更少 - 双赢。

并且不再是新手,RTFM - 它就在那里。请注意,我在此处提供的所有链接都会导致官方文档:)