2012-01-25 89 views
0

我有一個jsp,我在其中使用了scriptlets。它會在會話過期時生成警告消息PopUp並關閉。我的jsp如下:無法使用JavaScript關閉警告PopUp

 <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %> 


    <%@ page language="java" contentType="text/html"%> 
    <%@ session ="false" %> 
    <head> 
    <script type="text/javascript"> 
    function close() { 
     var userSessionExpire= "<%= request.getParameter("sessionExpire") %>"; 
     if(userSessionExpire !=null && userSessionExpire ="true"){ 
      open('', 'SessionWarning').close(); 
     } 
     } 
    </script> 
    </head> 

當我刪除scriplet和使用JSTL EL 彈出警告生成,但這個窗口是不是越來越接近與會話Expiry.changes情況如下:

  function close(){ 
     <c:set var="sess" value="${param.sessionExpire}" /> 
     if(sess !=null && sess ="true"){ 
     open('', 'SessionWarning').close(); 
     } } 

回答

0

你混合JavaScript和Java/JSP的性質。它們不會同步運行。您需要認識到Java/JSP在web服務器上運行,並根據HTTP請求生成HTML/CSS/JS代碼,Web瀏覽器將顯示HTML,應用CSS並在HTTP響應中執行JS。

您需要讓Java/JSP相應地生成JS代碼,使其具有有效的語法。你們的做法,

function close() { 
    <c:set var="sess" value="${param.sessionExpire}" /> 
    if (sess != null && sess = "true") { 
     open('', 'SessionWarning').close(); 
    } 
} 

生成的JS代碼看起來像這樣(右擊並查看源在網頁瀏覽器):

function close() { 

    if (sess != null && sess = "true") { 
     open('', 'SessionWarning').close(); 
    } 
} 

這是不對的。你希望它看起來像如下:

function close() { 
    var sess = true; // Or var sess = false; 
    if (sess) { 
     open('', 'SessionWarning').close(); 
    } 
} 

(請注意,我定你的if情況下,sess="true"不會做你的看法!)

所以,你需要重寫你的JSP如下:

function close() { 
    var sess = ${not empty param.sessionExpire and param.sessionExpire}; 
    if (sess) { 
     open('', 'SessionWarning').close(); 
    } 
} 

EL和小腳本之間的區別是,EL不打印null當該值是null,而是一個空字符串。因此,額外的not empty檢查,以便整個EL表達式打印一個完整的布爾值truefalse

以上如下也可以簡化爲:

function close() { 
    if (${not empty param.sessionExpire and param.sessionExpire}) { 
     open('', 'SessionWarning').close(); 
    } 
} 
+0

感謝BalusC,這些都是非常多,你認爲有用的技巧。非常感謝!! – user1057697