JSP没有获取更新的String值

时间:2015-01-09 13:17:10

标签: jsp attributes textarea refresh

我想在页面上显示类似“log”的内容,我正在使用textarea。我有每秒运行的计时器并调用Test.getConsole(),但是一旦加载了jsp页面,它就不会刷新。 Test.getConsole()方法即使具有新文本也始终返回相同的值。当我刷新页面(F5)时,显示Test.getConsole()的新内容。如何使(F5)的过程自动化?我希望使用Test.getConsole()返回的正确文本实时更新我的​​文本区域。

JSP:

<html>
<head>
    <title>MultiMine - Home</title>
    <script>
        function timer() {
            document.getElementById("1").value = "<%=Test.getConsole()%>";
            window.setTimeout("timer()", 1000);
        }
    </script> 
</head>
<body>
    <textarea id="1" name="output" style="width:1194px" rows="40"></textarea>
<script>
    timer();
</script>
</body>
</html>

Java:

public static String console = "Console initializing...";

public static String getConsole() {
    return console;
}

    public static void startConsole() {
   Timer t = new Timer();
    TimerTask tt = new TimerTask() {
        int i = 0;
        public void run() {
            try {
                console = console + "\\r" + i;
                i++;
            } catch (Exception e) {

            }
        }
    };
    t.schedule(tt, 1000, 1000);
}

在textarea中,我可以看到唯一的“控制台初始化...”,我需要刷新(F5)才能看到“控制台初始化... 1 2 3 4等...”(定时器输出)。如何“更新”字符串?

1 个答案:

答案 0 :(得分:0)

scriptlet&lt;%= Test.getConsole()%&gt;正在执行页面加载之前执行。 JSP以纯文本形式接收方法的初始值,因此Javascript实际上是

<script>
    function timer() {
        document.getElementById("1").value = "Console Initializing...";
        window.setTimeout("timer()", 1000);
    }
</script>

Javascript无法轻松调用Java代码。必须对页面发出新请求才能重新评估scriptlet。要自动化它,您需要使用Ajax。