日期:2014-05-16  浏览次数:20324 次

哪位大侠帮忙看下,一直没弄懂!
        <script language="javascript">
        function buffer(temp){

if(temp==1){
<%request.setAttribute("m", "1");%>}
else if(temp==2){
<%request.setAttribute("m", "2");%>}
else if(temp==3){
<%request.setAttribute("m", "3");%>}
else if(temp==4){
<%request.setAttribute("m", "4");%>}
else if(temp==5){
<%request.setAttribute("m", "5");%>}
else if(temp==6){
<%request.setAttribute("m", "6");%>}

}
        </script>
上面这段代码,执行后jsp页面通过getAttribute()取到的总是最后temp=6情况的结果,貌似分支语句不起作用,为什么?哪位大侠帮忙分析一下?

------解决方案--------------------
你js 执行前 后台先编译页面

编译的时候 <%里面的代码会执行

你的js代码 和   《%里面的代码 不在同一个执行层次中
------解决方案--------------------
#5说的对啊。

亲,jsp是会被编译成java代码,最终编译成servlet的。在<%%>之间的代码直接变成java,不在<%%>之间的代码一律变成字符串放到response.write中写到http响应流中去了。

so,你的那一坨if-else不是在服务器上运行,因为他是js,他在浏览器中才会得以解析。
js是客户端浏览器在跑,是访问者的CPU在解析指令。
而java代码是在服务器上跑的,是服务器的CPU在解析指令。

你的代码变成java就是:

response.write(" <script language=\"javascript\">\n");
response.write("function buffer(temp){\n");
response.write("if(temp==1){\n");
request.setAttribute("m", "1");
response.write('}\n');
response.write('else if(temp==2){\n');
request.setAttribute("m", "2");%>
response.write('}\n');
response.write('else if(temp==3){\n');
request.setAttribute("m", "3");
response.write('}\n');
response.write('else if(temp==4){\n');
request.setAttribute("m", "4");
response.write('}\n');
response.write('else if(temp==5){\n');
request.setAttribute("m", "5");
response.write('}\n');
response.write('else if(temp==6){\n');
request.setAttribute("m", "6");
response.write('}\n');
response.write('}\n');
response.write('</script>');