2014-12-06 21 views
0

我有一個jsp文件,可以與我的neo4j數據庫建立連接。它還可以在網頁上打印查詢。這是我的代碼:如何在JavaScript中使用jsp?

<%! 
public void test(JspWriter out) 
throws IOException 
{ 
GraphDatabaseService graphDb = new GraphDatabaseFactory().newEmbeddedDatabase("C:\\Users\\User\\Documents\\Neo4j\\default.graphdb"); 
ExecutionEngine engine = new ExecutionEngine(graphDb, StringLogger.SYSTEM); 

String query = "MATCH (name {name: 'Tom Hanks'}) RETURN name"; 
ExecutionResult result = engine.execute(query); 

out.println(result.dumpToString()); 

graphDb.shutdown(); 

} 
%> 
<html> 
<head><title>Test</title></head> 
<body> 
<input type="text" id="userInput"> 
<button onclick="zoek()">Zoek</button> 
<p id="demo"><% test(out); %></p> 
</body> 
</html> 

上面的代碼工作正常。它向我展示了關於'湯姆漢克斯'的信息。 但是,當我點擊一個按鈕時,我想收到這些信息。所以我用java腳本:

<script LANGUAGE="JavaScript"> 
    function zoek(){ 

    document.getElementById("demo").innerHTML = <% test(out); %>; 
    }  
</script> 

我認爲這會工作,但不幸的是它沒有。在控制檯日誌中,當頁面加載時,我收到以下消息。

「Uncaught SyntaxError:Unexpected token |」

如果我點擊按鈕,它說

「未捕獲的ReferenceError:我正在尋找沒有定義」

我希望你能幫助我。

+0

編寫一個適合你的JSP會話的後端,不要在JSP內部打開一個到數據庫的連接,這肯定會炸掉。 – 2014-12-10 08:02:17

回答

0

您不能在JavaScript文件中使用JSP指令,因爲JSP編譯是在服務器上完成的,而不是在客戶端上完成的。 JavaScript文件按原樣提供。

如果您必須在JavaScript文件中訪問服務器中設置的某些內容,則一種「醜陋」解決方法是在您的JSP中添加<script>標記並聲明var myVar = <% test(out); %>;。然後在您的JavaScript文件中使用myVar。但請注意文檔和JavaScript的加載順序。

<script>var myVar = <% test(out); %>;</script> 

我不推薦這種方法,而是通過一個REST API,通過使用jQuery例如(http://api.jquery.com/jquery.getjson/)一個AJAX調用而得到的數據異步。

0

您應該使用JSP表達式而不是scriptlet。另外,爲你的方法使用返回類型的String。請試試這個演示代碼。爲了測試,我用數據庫代碼替換了一個簡單的字符串。

<%! 
    public String test(){ 
     return "Tom Hanks is an actor"; 
    } 
%> 
<html> 
<head> 
<title>Test</title> 
<script type="text/javascript"> 
function zoek(){ 
    alert("test"); 
    document.getElementById("demo").innerHTML = "<%=test()%>"; 
} 
</script> 
</head> 
<body> 
<input type="text" id="userInput"> 
<button onClick="zoek()">Zoek</button> 
<p id="demo"></p> 
</body> 
</html>