问题一:在action中,怎么用注解去返回JSON,最后给个简单的例子源码;
@SuppressWarnings("serial")
@ParentPackage("json-default")  
问题二:如果问题一不行,则考虑使用servlet来调用使用注解的service方法,但是在servlet中调用service方法包空指针异常;
@SuppressWarnings("serial")
public class JsonServlet extends HttpServlet {
@Autowired
private CategoryService categoryService;
以上是2种情况的问题,随便解决一种,就可以,请各位高手帮帮忙!!!急!!!或者有jquery的级联例子都可以!!!

解决方案 »

  1.   

    @Action("jsonTest")
    public String jsonTest(){
    StringBuffer sb=new StringBuffer();
    PrintWriter out=response.getWriter();
                    sb.......//就是你拼成的json 
    out.print(sb.toString());
    return null;
    }//这是简单的返回一个json对象。 如果你的程序封装好了json那就用你程序中的。 Servlet和action中大同小异。 
      

  2.   

    action中的,out.print(json.toString());无效啊,就是想请教大家,action中如何以注解方式配置JSON返回到页面!!!
      

  3.   

       好像不存在 。 这是通用的方法 。 一定可以的。 你把你的json输入下看下效果
      
       还有就是如果用注解那就要在你的配置文件中要设置下。 而且要有个json返回值。 就是区分你返回的是不是json 如: return SUCCESS;   return JSON; 等
    <global-results>
    <result name="json" type="json">   //返回类型
     <param name="root">jsonMessageForm</param>//这是你定义的json类
    <param name="noCache">true</param>
    <param name="excludeNullProperties">true</param>
    </result>     
    </global-results>
     
      

  4.   


    @SuppressWarnings("serial")
    @Results( {
    @org.apache.struts2.convention.annotation.Result(name = "successSync", location = "/alipay/alipaysuccess.jsp"),
    @org.apache.struts2.convention.annotation.Result(name = "login", location = "/login.jsp", type = "redirect"),
    @org.apache.struts2.convention.annotation.Result(name = "nologin", location = "/alipay/buyproduct.jsp"),
    @org.apache.struts2.convention.annotation.Result(name = "islie", location = "/alipay/index.jsp"),
    @org.apache.struts2.convention.annotation.Result(name = "registuser", location = "/alipay/buyproduct.jsp"),
    @org.apache.struts2.convention.annotation.Result(name = "fail", location = "/alipay/Tip.jsp")})我的action是这样配置返回类型和页面的,不过刚刚试了你的在配置文件中配置,完了连Tomcat都启动不了!
      

  5.   

    jsonMessageForm 你是怎么定义的。    这个类中有两个变量: 一个code ,一个massage。  有个有参构造函数, 如果你action中有引用像BaseAction之类的辅助类那就在这里面定义jsonMessageForm变量   在action中引用就用 this.jsonMessageForm=new JsonMessageForm(200或者其他的,json//你拼成的json); 
      然后return json; // 看你在Results中定义的是什么。如果小写的就json 
      

  6.   

      在你的jsonMessageForm 类中必须定义:
    @Component("jsonMessageForm")
    @Scope("prototype")  要不找不到对象的。 
      

  7.   

    @ParentPackage(value = "json-default")
    @Results( { @Result(name = "success", type = "json") })
      

  8.   


    Unable to load configuration. - [unknown location]
    at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:58)
    at org.apache.struts2.dispatcher.Dispatcher.init_PreloadConfiguration(Dispatcher.java:360)
    at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:403)
    at org.apache.struts2.dispatcher.FilterDispatcher.init(FilterDispatcher.java:190)
    at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:275)
    at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:397)
    at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:108)
    at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:3709)
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4363)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
    at org.apache.catalina.core.StandardHost.start(StandardHost.java:719)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
    at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
    at org.apache.catalina.core.StandardService.start(StandardService.java:516)
    at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
    at org.apache.catalina.startup.Catalina.start(Catalina.java:578)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)
    Caused by: Unable to locate parent package [json-default] - [unknown location]
    at org.apache.struts2.convention.PackageBasedActionConfigBuilder.getPackageConfig(PackageBasedActionConfigBuilder.java:766)
    at org.apache.struts2.convention.PackageBasedActionConfigBuilder.buildConfiguration(PackageBasedActionConfigBuilder.java:447)
    at org.apache.struts2.convention.PackageBasedActionConfigBuilder.buildActionConfigs(PackageBasedActionConfigBuilder.java:278)
    at org.apache.struts2.convention.ClasspathPackageProvider.loadPackages(ClasspathPackageProvider.java:52)
    at com.opensymphony.xwork2.config.impl.DefaultConfiguration.reloadContainer(DefaultConfiguration.java:200)
    at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:55)
    ... 21 more添加七楼的代码出现如下,好像是少个什么包?
      

  9.   

    那个包我找到了,但是还是不能out.print()出来到页面,反正是JSP页面得不到数据,未出现任何反应    var id=jQuery("#cartype").val();
        var url="alipay!getparent.action?rootid="+id;
        jQuery.getJSON(url,function(data){
          alert(data);
        });
      

  10.   

    添加七楼后的注解:@SuppressWarnings("serial")
    @ParentPackage(value = "json-default")
    @Results( {
    @org.apache.struts2.convention.annotation.Result(name = "successSync", location = "/alipay/alipaysuccess.jsp"),
    @org.apache.struts2.convention.annotation.Result(name = "login", location = "/login.jsp", type = "redirect"),
    @org.apache.struts2.convention.annotation.Result(name = "nologin", location = "/alipay/buyproduct.jsp"),
    @org.apache.struts2.convention.annotation.Result(name = "islie", location = "/alipay/index.jsp"),
    @org.apache.struts2.convention.annotation.Result(name = "registuser", location = "/alipay/buyproduct.jsp"),
    @org.apache.struts2.convention.annotation.Result(name = "fail", location = "/alipay/Tip.jsp"),
    @org.apache.struts2.convention.annotation.Result(name = "json", type="json")})
    //方法
    public String getparent() {
    String rootid = ServletActionContext.getRequest()
    .getParameter("rootid");
    System.out.println("到了啊Rootid=" + rootid);
    List<Category> list = categoryService.getparentById(rootid);
    System.out.println(list.size());
    String json = JSONArray.fromObject(list).toString();
    try {
    ServletActionContext.getResponse().getWriter().print(json);
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    return "json";
    }