<%  
String success= (String) request.getAttribute("success");  
if (success.equals("codeExist")) {
%>
<script type="text/javascript">
              alert("该用户不存在!");
</script>
<%
} else {
success= "";
}
%><%

String success=(String)request.getAttribute("success");

if (success != null && success.equals("codeExist")) {
out.write("<script> alert('该用户不存在!'); </script>");
}
%>
第一个的效果是,弹出信息后,登陆界面的所有控件包括图片都不见了,只有那个“该用户不存在”弹出式信息,点确定后,消息框消失后,界面又出现了,而第二种就不会出现这种情况,界面在,同时也弹出消息,这是为什么?都是js代码啊,效果差距怎么就这么大呢

解决方案 »

  1.   

    一个在body内 一个在body外,难道是这个原因?
      

  2.   

    第2个js相当于是嵌套在java代码中间执行的,而第一个是单独执行的
      

  3.   

    应该是第一个 执行js时  html还没有执行完 页面不会出来
    也就是说你在显示页面之前就调了JS了 
      

  4.   

    你的第一个javascript 不是用页面内部的方法调用,而是直接执行,所以没有页面。
    要是在页面加一个的body 内部加一个触发时间自然就能出现页面了。
      

  5.   


    代码生成都在head之间比较好。
      

  6.   

    说明web浏览器解析执行html代码,js代码,jsp页面代码的时间点先后关系.由上面的例子可以说明
    第一断代码,js优先html代码执行.没等html整个页面解析加载完,就已经触发执行了.第二段代码,js是在直接输出页面,也就是和html成为一个整体,所以先显示出页面,才执行了js代码.
      

  7.   

    在<Head></Head>之间加入:
    <script language="JavaScript" type="text/javascript">
    $(document).ready(function(){
          <c:if test="${success eq 'codeExist'}">
              alert("该用户不存在!");
          </c:if>
       });
    </script>
    当文档准备就绪,开始执行function中的方法。<c:if>是EL表达式,在服务器端做判断,成立则输出 alert("该用户不存在!"),否则function方法体中没有内容。
      

  8.   

    第一段代码你可以看做是将代码分开执行的,java-js-java,  每个部分都独立开来。效果分层次
    第二段代码你可以看做是一个整体。就是java。是以一个整体的方式执行代码。
      

  9.   

    这个是web容器解析代码优先级的问题:
      scritplet > html > js
    楼主只要反编译两个jsp生成的class文件就能看出原因了。
      

  10.   

    楼主把生成的java文件发上看看。
      

  11.   

    out属于提交之后的处理所以没有消息框,属于HttpservletResponse
    alert();本身就是弹出一个消息框,属于script