如果你是想在加载jsp也面的时候触发<script> , 那我想这是没意义的.
ajax的目的是局部刷新,并不是通过action返回的jsp来整体刷新.
你要提交的到action中,但是并不返回一个jsp ,而是返回这个函数的结果,
然后在页面上通过js来操纵刚才返回的结果改变局部的东西.我想过程应该是这样的,你有个按纽,触发个js事件,在事件里面与action中的函数交互,等结果回来后在改变这个页面上局部的值.

解决方案 »

  1.   

    现在是返回的这个JSP里的JS有数据`把数据放到页面上没有问题`可以正常看到``放到JS里的就访问不到`````如果用struts2的这AJAX选项`struts2就完成了这改变页面局部的全过程```不知道怎么用了```其实我是在返回的jsp里加了个EXT的GRID`把数据放到JS里了``可返回这以后怎么也看不到```我试着另存了一下返回后的页面```<script>标签完整的回来了``访问不了``想直接用别人做好的东西就是麻烦```DOJO到1.0以后有自己的grid``可struts2.0.11带的才是DOJO0.4几吧``
      

  2.   

    对于Struts中使用ajax,我说说自己理解与实现吧。举一个注册时检查用户是否已存在的例子:
    1.需要一个
    <html:text property="username" />
    <html:button property="checkUser" onclick="retrieveURL('register.do?username='+username.value+'&timestampe='+(new Date()));">2.在Action中获取提交的内容,进行判断
    //判断是否是ajax提交
    if(request.getParameter("username")!=null && request.getParameter("timestampe")!=null){
    String result="";
    String username=request.getParameter("username");
    username=PageHelp.iso_8859_1ToGb2312(username);
    if(username!=null && !"".equals(username)){
    if(userBo.isExists(username)){
    result="对不起,用户已存在!";
    }else{
    result="恭喜,该用户可用!";
    }
    }
    response.setContentType("text/html");
    response.setCharacterEncoding("GB2312");
    PrintWriter out=null;
    try {
    out = response.getWriter();
    } catch (IOException e) {
    e.printStackTrace();
    }
    out.print(result);
    return null;
    }3.还需要一段js代码配合
      var req;
      var which;  function retrieveURL(url) {
        if (window.XMLHttpRequest) { // Non-IE browsers
          req = new XMLHttpRequest();
          req.onreadystatechange = processStateChange;
          try {
            req.open("GET", url, true);
          } catch (e) {
            alert(e);
          }
          req.send(null);
        } else if (window.ActiveXObject) { // IE
          req = new ActiveXObject("Microsoft.XMLHTTP");
          if (req) {
            req.onreadystatechange = processStateChange;
            req.open("GET", url, true);
            req.send();
          }
        }
      }  function processStateChange() {
        if (req.readyState == 4) { // Complete
          if (req.status == 200) { // OK response
            //document.getElementById("span1").innerHTML = req.responseText;
            alert(req.responseText);
          } else {
            alert("Problem: " + req.statusText);
          }
        }
      }总结:
    首先,通过XMLHttpRequest将***.do的URL请求发送到对应的Action上;
    Action判断是否是Ajax提交的查询,如果是返回一段xml或html代码,也可以是字符串;
    最后,XMLHttpRequest将Action返回的内容显示出来,这里演示的是alert方式显示,当然也可以innerHTML方式显示。注意:
    我在URL中加入timestampe='+(new Date()...,这是为什么呢?
    大家都知道浏览器有缓存,如果url不变,浏览器可能会从缓存中读取数据,就会造成没有提交Server查询而返回上次查询的结果。使用了new Date()是保证每次URL都不一样。
      

  3.   

    谢谢LS的回复``但你说的不是我问的意思```ajax的原理我的明白``我也直接用XMLHttpRequest做过一点东西```我现在是问struts2中`添加了theme=ajax以后`是怎么用DOJO来实现的``
      

  4.   

    你说的是struts2吧,最近刚好看了点这个东西,struts2的验证基本上有三种:
    1、后台验证
    2、客户端验证
    3、ajax验证
    第三种验证过程大概是这样的。在生成页面的时候如果有theme=ajax这样的字段,就会插入相关的代码(见struts2的showcase验证代码)
     <script language="JavaScript" type="text/javascript" src="/struts2-showcase-2.0.11/struts/niftycorners/nifty.js"></script>    <script language="JavaScript" type="text/javascript">        window.onload=function(){
                if(!NiftyCheck())
                    return;
                Rounded("blockquote","tr bl","#ECF1F9","#CDFFAA","smooth border #88D84F");
                Rounded("div#outer-header", "all", "white", "#818EBD", "smooth border #434F7C");
                Rounded("div#footer", "all", "white", "#818EBD", "smooth border #434F7C");
            }    </script><script type="text/javascript">
        // Dojo configuration
        djConfig = {
            baseRelativePath: "/struts2-showcase-2.0.11/struts/dojo",
            isDebug: false,
            bindEncoding: "UTF-8",
            debugAtAllCosts: true // not needed, but allows the Venkman debugger to work with the includes
        };
    </script>
    <script type="text/javascript"
            src="/struts2-showcase-2.0.11/struts/dojo/dojo.js"></script>
    <script type="text/javascript"
            src="/struts2-showcase-2.0.11/struts/simple/dojoRequire.js"></script><script type="text/javascript"
            src="/struts2-showcase-2.0.11/struts/ajax/dojoRequire.js"></script>
    <script type="text/javascript"
            src="/struts2-showcase-2.0.11/struts/CommonFunctions.js"></script>
    如果有兴趣知道他是怎么验证的,你可以看这些代码
      

  5.   

    搞定了``在`<s:submit value="提交查询" theme="ajax" targets="resultHolder"></s:submit>里加一个 executeScripts="true" 就可会运行返回页面里的JS```DOJO的源代码我是没看``多看看STRUTS2的例子是真的```
      

  6.   

    虽然现在还是不很了解实际的DOJO是怎么实现`但还是实现了``谢谢LS的几位```