Struts2页json整合的问题,希望有大神指点

salory 2015-10-15 01:28:36
先说说出了什么问题,为了能够有针对性的去看代码,我在整合struts2和json时报了以下错误:

严重: There was an exception while instantiating the result of type org.apache.struts2.json.JSONResult
java.lang.NullPointerException
at java.util.concurrent.ConcurrentHashMap.get(ConcurrentHashMap.java:936)
at com.opensymphony.xwork2.ognl.OgnlUtil.compile(OgnlUtil.java:266)
at com.opensymphony.xwork2.ognl.OgnlUtil.setValue(OgnlUtil.java:230)
at com.opensymphony.xwork2.ognl.OgnlUtil.setValue(OgnlUtil.java:226)
at com.opensymphony.xwork2.ognl.OgnlUtil.internalSetProperty(OgnlUtil.java:463)
at com.opensymphony.xwork2.ognl.OgnlUtil.setProperty(OgnlUtil.java:177)
at com.opensymphony.xwork2.ognl.OgnlReflectionProvider.setProperty(OgnlReflectionProvider.java:90)
at org.apache.struts2.factory.StrutsResultFactory.setParameter(StrutsResultFactory.java:67)
at org.apache.struts2.factory.StrutsResultFactory.setParameters(StrutsResultFactory.java:52)
at org.apache.struts2.factory.StrutsResultFactory.buildResult(StrutsResultFactory.java:41)
at com.opensymphony.xwork2.ObjectFactory.buildResult(ObjectFactory.java:212)
at com.opensymphony.xwork2.DefaultActionInvocation.createResult(DefaultActionInvocation.java:216)
at com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:365)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:275)
at org.apache.struts2.interceptor.DeprecationInterceptor.intercept(DeprecationInterceptor.java:41)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:256)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:167)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:265)
at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:138)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:254)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:254)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:191)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:73)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:91)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:252)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:145)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:171)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:139)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:193)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:189)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:54)
at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:562)
at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:99)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:957)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:423)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1079)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:620)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2516)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2505)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:745)

然后是Action的相关代码,dao层和service层的代码就不贴了,都是经过测试了的,没有问题,但是在传值到页面,或者根据这报错信息说传值到JSONResult过程中出了问题:


@Namespace("/Business")
@ParentPackage("json-default")
@Results(value = {

@Result(name = "jsonMap", type = "json", params = {"root", "pageMap"}, location = "/business/view_business.jsp"),
@Result(name = "error", location = "/login/fail.jsp")
})
@ExceptionMappings(
@ExceptionMapping(exception="java.lang.Exception", result="error")
)
@Controller
@Scope("prototype")
public class BusinessAction extends BaseAction<Business> implements Serializable{

private static final long serialVersionUID = 1637187830247472443L;


@Action(value = "list")
public String list(){
pageMap = new HashMap<String, Object>();

System.out.println("bname:" + model.getBname());

List<Business> businesses = businessService.findAllBusiness(model.getBname(), page, rows);

System.out.println(businesses.toString());

pageMap.put("rows", businesses);

pageMap.put("total", businessService.countBusiness(model.getBname()));

System.out.print(pageMap.toString());

System.out.println(businessService.countBusiness(model.getBname()));
// request.put("businesses", businessService.findAllBusiness());

return "jsonMap";

}


有大神帮忙解决一下吗?困扰了好多天了,小弟感激不尽。
...全文
250 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
iteen 2017-11-17
  • 打赏
  • 举报
回复
List<Business> businesses = businessService.findAllBusiness(model.getBname(), page-1, rows);
iteen 2017-11-17
  • 打赏
  • 举报
回复
List<Business> businesses = businessService.findAllBusiness(model.getBname(), page, rows);
salory 2015-10-20
  • 打赏
  • 举报
回复
好了,我对不起大家更对不起自己,我在Action里面配了@ExceptionMapping,导致一直忽略了应该出现的异常。response出现问题是因为其他地方出现了问题。谢谢大家
salory 2015-10-20
  • 打赏
  • 举报
回复
引用 9 楼 rui888 的回复:
struts-2-json-integration-annotation-example
非常感谢,只是这两个例子都是在Action里面将对象转换成json对象的,而我是利用struts2-json-plugin包里面的工具类将pageMap对象通过给root赋值转换的,现在问题好像是出在视图页面收不到response
tony4geek 2015-10-20
  • 打赏
  • 举报
回复
salory 2015-10-20
  • 打赏
  • 举报
回复
解决了一半,Action代码第五行: @Result(name = "jsonMap", type = "json", params = {"root", "pageMap"}, location = "/business/view_business.jsp"), 多写了一个location,转换为json格式并发送是不需要location属性的,现在没有报错了,但是页面上输出不了信息啊。
josh_wang 2015-10-16
  • 打赏
  • 举报
回复
params = {"root", "pageMap"} 你root设置值了么?
salory 2015-10-15
  • 打赏
  • 举报
回复
我把页面也贴出来吧,也是测试过的,把值传入是可以正确显示信息的:

<head>
    <%@ include file="/public/head.jspf" %>
    <script type="text/javascript">
        $(function(){
            $('#dg').datagrid({
                url:'/Business/list.action',
                queryParams:{bname:''},
                //显示斑马线
                striped:true,
                //数据显示同行 默认true
                nowrap:true,
                loadMSG:'请等待.....',
                //自动适应列, 如果设置此属性则不会出现水平滚动条
                fitColumns:true,

                pagination:true,
                frozenColumns:[[
                    {field:'c',checkbox:true},
                    {field:'bid',title:'编号',width:100}
                ]],
                columns:[[
                    {field:'bname',title:'商家名称',width:100}
                ]]
            });
        });
    </script>
</head>
<body>
    <table id="dg"></table>
</body>
salory 2015-10-15
  • 打赏
  • 举报
回复
引用 3 楼 shijing266 的回复:
那这个空指针是怎么出来的
就是找不到这是哪里的错误啊,所以发帖子找帮助啊
  • 打赏
  • 举报
回复
那这个空指针是怎么出来的
salory 2015-10-15
  • 打赏
  • 举报
回复
引用 1 楼 shijing266 的回复:
先不要用Results自动去转,你手动将list转成json,然后去传值试试
都是可以通过的,程序根本是没有问题的,现在是想求通过Struts的result传值到页面
  • 打赏
  • 举报
回复
先不要用Results自动去转,你手动将list转成json,然后去传值试试

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧