2012-01-25 50 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