问题一:在action中,怎么用注解去返回JSON,最后给个简单的例子源码;
@SuppressWarnings("serial")
@ParentPackage("json-default")
问题二:如果问题一不行,则考虑使用servlet来调用使用注解的service方法,但是在servlet中调用service方法包空指针异常;
@SuppressWarnings("serial")
public class JsonServlet extends HttpServlet {
@Autowired
private CategoryService categoryService;
以上是2种情况的问题,随便解决一种,就可以,请各位高手帮帮忙!!!急!!!或者有jquery的级联例子都可以!!!
@SuppressWarnings("serial")
@ParentPackage("json-default")
问题二:如果问题一不行,则考虑使用servlet来调用使用注解的service方法,但是在servlet中调用service方法包空指针异常;
@SuppressWarnings("serial")
public class JsonServlet extends HttpServlet {
@Autowired
private CategoryService categoryService;
以上是2种情况的问题,随便解决一种,就可以,请各位高手帮帮忙!!!急!!!或者有jquery的级联例子都可以!!!
public String jsonTest(){
StringBuffer sb=new StringBuffer();
PrintWriter out=response.getWriter();
sb.......//就是你拼成的json
out.print(sb.toString());
return null;
}//这是简单的返回一个json对象。 如果你的程序封装好了json那就用你程序中的。 Servlet和action中大同小异。
还有就是如果用注解那就要在你的配置文件中要设置下。 而且要有个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>
@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都启动不了!
然后return json; // 看你在Results中定义的是什么。如果小写的就json
@Component("jsonMessageForm")
@Scope("prototype") 要不找不到对象的。
@Results( { @Result(name = "success", type = "json") })
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添加七楼的代码出现如下,好像是少个什么包?
var url="alipay!getparent.action?rootid="+id;
jQuery.getJSON(url,function(data){
alert(data);
});
@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";
}