最近写struts2 的时候用到了异步提交  里面出现个问题: ajax提交一定需要Servlet来接吗?我试了下用Action来接  暂时还没成功!请教各位大吓哈

解决方案 »

  1.   

    struts2很好的支持ajax,有很多标签可以用得,网上找个例子看看
      

  2.   

    这个要在struts.xml中配置的 还有就是响应的格式如JSON
      

  3.   

    js:var xmlHttp;
    var viewModel;//需要显示的区块
    //建立异步处理对象
    function createXMLHttpRequest() {
    xmlHttp = false;
    //开始初始化XMLHttpRequest对象
    if(window.XMLHttpRequest) { //Mozilla 浏览器
    xmlHttp = new XMLHttpRequest();
    if (xmlHttp.overrideMimeType) {//设置MiME类别
    xmlHttp.overrideMimeType('text/xml');
    }
    }
    else if (window.ActiveXObject) { // IE浏览器
    try {
    xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
    try {
    xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
    } catch (e) {}
    }
    }
    if (!xmlHttp) { // 异常,创建对象实例失败
    window.alert("不能创建XMLHttpRequest对象实例.");
    return false;
    }
    }
    //请求页面更换
    function requestMain(model,url) 
    {
      createXMLHttpRequest();
      viewModel=model;
      document.getElementById(model).innerHTML="<div id='loading'>正在加载...</div>";
      url=url+time="+new Date().getTime();
      xmlHttp.open("GET", url, true);
      xmlHttp.onreadystatechange = viewMain;
      xmlHttp.send(null);
    }
    function viewMain()
    {
      if (xmlHttp.readyState == 4) 
      {
        if (xmlHttp.status == 200) 
        {   
    setTimeout("viewContent()", 800);        }
        }
    }
    //显示模块
    function viewContent()
    {
      document.getElementById(viewModel).innerHTML=xmlHttp.responseText;
    }
    html:<div id="view"></div>
    <a href="javascript:void(0)" onClick="requestMain('<s:url action="HelloAction?Msg=Hello World.">',view)">Action</a>
    <a href="javascript:void(0)" onClick="requestMain('<s:url action="HelloAction?Msg=test ok.">',view)">Action</a>
    action:HttpServletRequest request = ServletActionContext.getRequest();
    String Message = request.getParameter("Msg");
    基本上就是这样
      

  4.   

    struts2 的action很好的地支持ajax的异步请求的,你可能是因为访问地址写错了吧!
      

  5.   

    唉。struts最后会跳转到那个页面去?童鞋,是view层!在view层写啥?是一个json!{....}具体咋写。还是自己找找吧。
      

  6.   

    当然。前提是extjs一类的东东,如果没有使用任何框架,那就只需要你把信息${message}在jsp页面就可以了。
      

  7.   

    struts完全可以支持ajax的异步请求
      

  8.   

    ajax的请求和你平时请求没什么区别的,
    比如你平时没用用xxx.action去后台请求,那用ajax也用xxx.action没有什么区别的!
    取不到数据的原因可能是你前台没写好!ajax难度就在于 用的是js,由于浏览器之间的不一样,js也会相对不一样,比较麻烦一点!其实原理很简单!
      

  9.   

    如果你是用的servlet就不要跳转. 同理你使用action就return null;     或者不跳转
      

  10.   

    楼主的这边的Ajax是针对的web的Ajax,Ajax无非异步请求,Web的Ajax无非是浏览器向服务器服务端口发送了一次http的异步请求。浏览器同时等待服务端的response流,并将流展现到view的变化中。所以只要能解析http协议的服务都可以为之提供服务,即能答复请求。在答复能力上,完全可以把Ajax的身份摒弃,完全当做普通HTTP请求来看。
    Web 容器通过部署在其中服务回应请求。那么回顾http请求的声明周期,不难看出.----------------------------
    request -> filter -> servlet -> filter -> response
    ----------------------------Action 只不过是MVC模式中分出来的东西。关键的东西只有servlet 和 filter 而已。例如: Struts2便有 servlet 和 filter 驱动两种模式。
      

  11.   

    谢谢各位了
    这个问题已经解决在ajax异步接收的时候,,只要相应的Action里面相关参数提供getter setter 方法 不需要发送接收等操作  然后在struts.xml 的action 标签属性里面 加上 type="json"  
        <param name="includeProperties"></param>
    当然json这个result得提前写好