2014-04-06 96 views
0

好的。這是我的完整代碼。我的問題是,當試圖在我的javascript/html代碼中使用字符串數組「comentarios」我不知道如何「傳遞」整個數組。我一直在使用applet工作幾個月,但是我從來不必將數組傳遞給「html like code」。我該如何解決這個問題?感謝將java數組打印成HTML代碼

import java.awt.*; 
import java.awt.event.*; 
import java.sql.*; 
import java.io.*; 
import javax.servlet.*; 
import javax.servlet.http.*; 

public class ValoracionesDos extends HttpServlet implements SingleThreadModel{ 
    public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException{ 
PrintWriter toClient = res.getWriter(); 
int numRows=3; 
String comentarios[] = new String[numRows]; 
comentarios[0]="hello"; 
comentarios[1]="me"; 
comentarios[2]="bye"; 
int i=0; 
    toClient.println("<html>"); 
    toClient.println("<body>"); 
    toClient.println("<script Language=JavaScript>"); 
    toClient.println("var len = " + numRows+";"); 
    toClient.println("var myrest = new Array();"); 
    toClient.println("for(i = 0; i < len; i++){"); 
     toClient.println("myrest[i]='"+ comentarios[i]+"';"); 
     toClient.println("}"); 
    toClient.println("var myTable= '<table border=10 cellspacing=3 cellpadding=3>'"); 
    toClient.println("for(i = 0; i < " + numRows + "; i++){"); 
     toClient.println("myTable+='<tr>';"); 
     toClient.println("myTable+='<td> Restaurante: </td>';"); 
     toClient.println("myTable+='<td>'+"+"myrest[i]"+"+'</td>';"); 
     toClient.println("myTable+='</tr>';"); 
    toClient.println("}"); 
    toClient.println("myTable+='</table>';"); 
    toClient.println("document.write(myTable);"); 
    toClient.println("</script>"); 
    toClient.println("</body>"); 
    toClient.println("</html>"); 

} 

} 

的問題是,被叫JavaScript數組「myrest」總是與的了「意見」(java的字符串數組)的第一個元素填充。我該如何解決這個問題。謝謝

+0

我不確定,但你似乎在這裏感到困惑。雖然我可能錯了。 Java小程序是在瀏覽器中運行的小程序,它們仍然是Java程序。他們不能呈現HTML響應。 HTML響應應該由瀏覽器呈現。對於Java應用程序將響應發送回瀏覽器並運行,您需要用Java編寫Servlet。讓我知道這是否有道理。 –

+0

是的。我有一個瀏覽器調用的.class(來自.java) – karl71

+0

你是在tomcat中運行還是在瀏覽器中運行applet?你能發佈完整的課程文件嗎? –

回答

3

一兩件事第一:不管你在做什麼,不管你做一個applet或servlet或任何其他Java應用程序,它是從未一個好主意,通過附加的字符串進行HTML。 千萬別這麼做!但是當我開始學習時,我做了同樣的事情(:D),今天我對此大笑起來。所以,讓我們假設你想學習Java並且你需要一些提示...

你問題在於你的JavaScript(你生成的)循環與你的Java數組無關。當然。你所做的是你從Java代碼中創建另一個程序(一個JavaScript程序)。這兩個程序(您的Java代碼和它生成的JavaScript)是兩個完全不同的應用程序。所以你不能通過Java數組來迭代JavaScript(就像你嘗試的那樣)。

相反,您應該在Java中迭代Java數組並生成JavaScript代碼。下面是它的樣子(我沒有測試它,它是僞代碼):

toClient.println("var myrest = new Array();"); 
for(String element: myArray) 
    toClient.println("myrest.append(" + element + ");"); 
+0

是的!有用!只需將「.append」改爲「.push」即可。你是對的...我通過附加字符串來編寫html代碼。哪一個是正確的選擇? – karl71

+0

使用你的解決方案我會得到一個巨大的HTML是陣列非常長。 :(無論如何,謝謝! – karl71

+0

@ karl71 - 是的,HTML/JavaScript可能會變得非常大,但是你不能避免這種情況,在某些地方你必須將信息存儲在你的HTML源代碼中。可以使用某種模板渲染,這是通過一個框架(如Play框架)來完成的,它將採用一個模板(這是一個帶有特殊語法的HTML文件)並填充它,但結果也會非常大。http://www.playframework.com/documentation/2.2.x/JavaTodoList –