比如在action中用request返回前台a.jsp时,我用:request.setAttribute("back", "<script>alert('abc');</script>");
在a.jsp的body中,我用:${back}来取值,当返回a.jsp时,会出现个提示框,提示信息当然为:abc,这个是对的,没问题的.现我在a.jsp中,定义了js函数:function myalert(info){alert(info);}
同理,我用:request.setAttribute("myback", "<script>myalert('abc');</script>");返回a.jsp时,用${myback}来取,
大家猜猜会出现什么?我想从表面上看,很多人可能都认为也应该是提示信息为:abc,不过,很遗憾的是:错了!
问题出来了,为何前者可以后者不行呢?如何让后者也行呢?

解决方案 »

  1.   

    怎么错啊,EL表达试错,还是脚本错??嘿嘿
    一般是这样写的: <script>
    function myalert(info)
    {
    alert(info);

     </script>
    这个脚本应该写在最前面( 即<head></head>里面)
    比如我在acrion中这样写的:request.setAttribute("msg","<script>myalert('请您输入您要显示的文字')</script>");那么在页面上这样调用
    ${msg}${msg}我建议写在页面最后但是一定要写在<body></body>之内,这是页面顺序加载的问题哦
      

  2.   

    问题的起因,LZ要明白,在jsp页面用el表达式取到得值是动态的,它在页面编译的时候
    是先执行的,也就是说执行myalert这个函数,但是此时myalert这个函数还没有定义,
    问题解决:
    只需 把request传过来的myback的值里的js代码写成不是加载页面就弹出,而是经过某一个控件
    触发弹出就可以了。
    比如request.setAttribute("myback", " <script>function myalert('abc'){alert('abc');}</script>")然后在页面触发。
      

  3.   

    因为 alert是script的内置函数.
    你直接用的话,就不存在触发的问题,调用就是触发。
    而已你自定义函数myalert 是要触发的。而你
    获取这个字符串在页面上被执行的时候<script>myalert('abc'); </script>
    这样不会触发myalert方法的,必须事件来触发。
    就好比在你 jsp 页面上嵌套了扎样两段代码:
    1. 
    <script>
    alert("abc");
    </script>
    2.<script>
    function myalert(){
    alert("abc");

    </script>在你进入这个页面的时候编译jsp,编译到这个两处的时候,1处就这会弹出提示。
    而2是不会弹出提示的,只有在你页面某一个控件的事件去触发时才会弹出提示的。
    比如 onclick="myalert()" 等。