//in action
String getUsername() {
    return username;
}void setUsername(String username) {
    this.username = username;
}
//in jsp<s:property value="username"/>这样用s标签可以得到username, 但是我现在想通过ajax(单纯的用javascript发送ajax不用任何jar)得到这个username
有什么办法呢? 比如 有没有可能通过这个网址 action_url/username或者类似的方式得到这个username?
主要就是想用于ajax我以前做asp.net的
public class HomeController : Controller
{
    public ActionResult Home()
    {
        ViewBag.Message = "Modify this template to jump-start your ASP.NET MVC application.";        return View();
    }    public JSONResult getJson()
    {
        return JSON(new Object());
    }
}
在asp.net的mvc里头 一个controller 可以有多个方法 对应不同的url
比如上述例子 controller_name/Home 就能进入一个网页 controller_name/getJson 就可以获得一段JSON
我就想struts2是不是也可以一个class 能否返回多种类型?
(不过后来我理解 asp.net的controller中的一个方法 对应struts中一个Action比如Home如果用Struts可以是HomeAction 而getJSON就变成另一个Action 不知道我理解对不对?)

解决方案 »

  1.   

    现在用单纯的JS写AJAX很少了,基本都是通过现在的JS框架来实现的,用得最多的应该是JQUERY,里面封闭了直接调用AJAX的方法,非常方便,并且可以设置返回数据类型,你可以通过JQUERY在JSP页面调用ACTION,返回数据就可以了.
      

  2.   

    你知道dwr不。这个可以实现。
      

  3.   


    <package name="json" extends="json-default" namespace="">
       <action name="actionName" class="com.*.*.test" method="test">
       <result type="json">   
        <param name="includeProperties">username</param>   
    </result>
       </action>

     </package>
    url/actionName.action 就能得到返回的json内容了,可以用ajax调用这个url
      

  4.   

    对,在你的struts的配置文件里面,将action的返回数据类型改成json的方式
      

  5.   


    我的意思是actionName 返回网页 但是actionName/getUsername返回json (能否只在一个action实现)
      

  6.   


    我的意思是actionName 返回网页 但是actionName/getUsername返回json (能否只在一个action实现)可以PrintWriter out = ServletActionContext.getResponse().getWriter();
    ServletActionContext.getResponse().setContentType("text/html;charset=UTF-8");
    out.print(username);
    out.close();


    return null;
      

  7.   

    比较简单就是使用jquery的$.post(url,"usernmae=xxx",function(data){alert(data)});
    你在action那里直接response.getWriter().print(data);字符串,然后页面转换这个data字符串就可以了
    你可以到我的博客那下载那开源项目看看里面是怎么实现的,没什么问题
      

  8.   

    有框架为什么要自己写  jquery的 ajax想怎么交就怎么交 难道 写错了你再回来调JS?
      

  9.   


    我的意思是actionName 返回网页 但是actionName/getUsername返回json (能否只在一个action实现)可以PrintWriter out = ServletActionContext.getResponse().getWriter();
    ServletActionContext.getResponse().setContentType("text/html;charset=UTF-8");
    out.print(username);
    out.close();


    return null;你的那段java代码是放在execute吧 这样的话 虽然可以输出string 但是没法返回页面了啊
    我的意思是能不能有2个execute
    我现在的解决办法是
    判断url, 如果url是actionname?act = getjson 的话就返回string 否则返回页面
      

  10.   

    ajax请求这个action 然后把username返回去就是了。
      

  11.   


    我的意思是actionName 返回网页 但是actionName/getUsername返回json (能否只在一个action实现)可以PrintWriter out = ServletActionContext.getResponse().getWriter();
    ServletActionContext.getResponse().setContentType("text/html;charset=UTF-8");
    out.print(username);
    out.close();


    return null;你的那段java代码是放在execute吧 这样的话 虽然可以输出string 但是没法返回页面了啊
    我的意思是能不能有2个execute
    我现在的解决办法是
    判断url, 如果url是actionname?act = getjson 的话就返回string 否则返回页面
    不用判断url,你给url加个参数就行了比如/*.action?type=ajax 后台就用我上面那段代码,如果type=html后台代码判断下 if(type.equals("ajax")){ .... }else{ ... return SUCCESS  }
      

  12.   

    我明白你的意思了
    还有想问下 怎么获得type呢? 有没有内置方法?
    或者我需要ServletActionContext.getRequest().getParameter("type")?
    企业里也是这么做的么?
    我的意思是actionName 返回网页 但是actionName/getUsername返回json (能否只在一个action实现)可以PrintWriter out = ServletActionContext.getResponse().getWriter();
    ServletActionContext.getResponse().setContentType("text/html;charset=UTF-8");
    out.print(username);
    out.close();


    return null;你的那段java代码是放在execute吧 这样的话 虽然可以输出string 但是没法返回页面了啊
    我的意思是能不能有2个execute
    我现在的解决办法是
    判断url, 如果url是actionname?act = getjson 的话就返回string 否则返回页面
    不用判断url,你给url加个参数就行了比如/*.action?type=ajax 后台就用我上面那段代码,如果type=html后台代码判断下 if(type.equals("ajax")){ .... }else{ ... return SUCCESS  }我明白了 
      

  13.   

    楼主你好,我也是新手在学习Struts+Jquery。就你说的这个例子,我还想看看你的Java源代码,可以贴上来共享一下吗?谢谢!  我以前用过php+Jquery,觉得非常简便易用,现在换到Struts环境下,不知道如何来控制JSON数据的格式和如何传递与接收。
      

  14.   

    加我QQ one 9 nine 9 nine four 6 zero  5
      

  15.   

    也可以不用在struts2中配置type等于json,可以直接拿到PrintWriter往ajax请求写哦。然后页面还是同样跳转。这样的json格式,就需要自己去拼字符串了。然后在前台接受后,eval("("++")")当做json格式,这样也可以把。这是我的方法。