2011-04-17 70 views
3

我的代碼目前看起來像這樣訪問的JavaScript通過Java在JSP

<% 
    if (request != null) { 
     bustOut; 
    } 
%> 

<script language="javascript"> 
function bustOut(){ 
    var newWin = window.open("the real url", "subWindow","height=500,width=700,resizable=yes,scrollbars=yes"); 
} 
</script> 

如何調用Java代碼中的JavaScript功能?或者這是不可能的?

回答

5

JSP在web服務器上運行,並根據webbrowser請求生成/生成HTML/CSS/JS代碼。網絡服務器發送HTML/CSS/JS到網頁瀏覽器。 Webbrowser運行HTML/CSS/JS。所以,你只需讓JSP將它打印成JS代碼即可。

<script language="javascript"> 
    function bustOut(){ 
     var newWin = window.open("the real url", "subWindow","height=500,width=700,resizable=yes,scrollbars=yes"); 
    } 
    <% 
     if (foo != null) { 
      out.print("bustOut();"); 
     } 
    %> 
</script> 

,或者better,與EL

<script language="javascript"> 
    function bustOut(){ 
     var newWin = window.open("the real url", "subWindow","height=500,width=700,resizable=yes,scrollbars=yes"); 
    } 
    ${not empty foo ? 'bustOut();' : ''} 
</script> 

(請注意,我改變了屬性名稱foo因爲request代表HttpServletRequest以防混淆,因爲這是從來沒有null

無論哪種方式,生成的HTML(您應該通過在瀏覽器中打開頁面來查看,右鍵單擊並選擇查看源代碼)應該是這樣的,當條件爲真:

<script language="javascript"> 
    function bustOut(){ 
     var newWin = window.open("the real url", "subWindow","height=500,width=700,resizable=yes,scrollbars=yes"); 
    } 
    bustOut(); 
</script> 

是否現在打開一個燈泡在你的頭頂?

+0

謝謝!這工作 – Jin 2011-04-17 21:27:28

+0

不客氣。 – BalusC 2011-04-17 22:28:34

0

無法從Java調用JavaScript函數

Java代碼在服務器上執行,以及JavaScript - 在客戶端上。

你似乎需要的是有條件地打開一個文件加載的新窗口。對於:

<c:if test="${shouldDisplayWindow}"> 
    $(document).ready(function() { 
     bustOut(); 
    }); 
</c:if> 

(這是jQuery的上述檢測文檔加載您可以使用純JavaScript代替它 - window.onload = function() {..}document.onload = function() {..}我想。)

注意request != null是毫無意義的條件 - 要求是永遠不會null在一個JSP。

最後 - 使用jstl標籤(如我所示)而不是java代碼(scriptlets)。