<%@ include file="/include/page_header.jsp"%>
<script type="text/javascript">
//$("#navigation").hide();
myTable = $('#myTable').dataTable({
"bServerSide": true,
"sAjaxSource": "${cxp}/manage/control/navigationUrlList.do", //mvc后台ajax调用接口。
"sServerMethod": "POST",
'bPaginate': true, //是否分页。
"bProcessing": true, //当datatable获取数据时候是否显示正在处理提示信息。
'bFilter': false, //是否使用内置的过滤功能。
'bLengthChange': true, //是否允许用户自定义每页显示条数。
'sPaginationType': 'full_numbers', //分页样式
"sDom": '<"top"f>rt<"bottom"flip><"clear">',
"order": [[4, "asc"]],
"fnDrawCallback": function (oSettings, json) {
tb_init('a.edit');
},
"sAjaxDataProp":"navUrlList",
"aoColumns": [
{ "mData": "navTitle","bSortable": false},
{ "mData": "navUrl","bSortable": false},
{ "mData": "createDate","mRender":datetimeRender},
{ "mData": "status","bSortable": false,
"mRender":function(data,type,full){
if(data=="1"||data=="YES"){
return "Y";
}
return "N";
}
},
{ "mData": "orderNum","mRender":strDefRender},
{ "mData": "id","bSortable": false,
"mRender":function(data,type,full){
return "
Edit
Delete";
}
}]
});
function strDefRender(data,type,full){
if(data==null){
return " ";
}
return data;
}
function datetimeRender(data,type,full){
if(data==null){
return " ";
}
return data.replace("T"," ");
}
function refresh(){
myTable.fnDraw();
tb_remove();
}
function del(id){
if(confirm("Confirm delete?")){
$.ajax({
type: "POST",
url: "deleteNavigationUrl.do",
data: {id:id},
dataType: "json",
success: function(data){
alert(data.message);
if(data.message.indexOf("Success")>-1){
myTable.fnDraw();
}
}
});
}
}
</script>
在用struts2 的Action 加@ParentPackage("json-default")注解 or struts.xml 配置文件中 Action所在的package 继承
json-default,Action中方法返回json类型的数据时,在没有任何设定的情况下,改类下的所有getter方法的返回值将被包含在返回给客户端的JSON字符串中。需要剔除不需要包含的属性,在类结构结构中需要在getter方法上使用@JSON(serialize=false)进行注解,当然在不影响其他业务的时候也可以直接去掉这个getter方法。所以本例中的返回结果是将dataMap对象转换成的JSON格式的字符串
(serialize=false)。由于当时没注意这特特点,出现以下bug,先列出出现问题的代码。
NavigationUrlAction 类
package com.swdt.manage.action;
import java.util.Date;
import java.util.List;
import javax.annotation.Resource;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.ParentPackage;
import org.apache.struts2.convention.annotation.Result;
import org.springframework.stereotype.Controller;
import com.swdt.manage.service.NavigationUrlService;
import com.swdt.sys.action.BaseAction;
import com.swdt.web.entity.enumtype.EnumYesOrNo;
import com.swdt.web.entity.navigation.NavigationUrl;
/**
* 导航推荐文字
*
* @ClassName: NavigationUrlAction
* @Description: TODO
* @author liugenxiang
*
*/
@Controller
@ParentPackage("json-default")
public class NavigationUrlAction extends BaseAction {
@Resource(name = NavigationUrlService.ID_NAME)
private NavigationUrlService navigationUrlService;
private String message;
private List
navUrlList;
private NavigationUrl _navUrl;
@Action(value = "/manage/control/toNavigationUrlPage", results = {
@Result(name = SUCCESS, location = "/manage/control/navigation_url.jsp") })
public String toNavigationUrlPage(){
return SUCCESS;
}
@Action(value = "/manage/control/navigationUrlList", results = {
@Result(name = SUCCESS, type = "json", params = { "ignoreHierarchy", "false" }) })
public String navigationUrlList() {
navUrlList = navigationUrlService.findList(null,super.getReqPages());
return SUCCESS;
}
@Action(value = "/manage/control/toNavigationUrl", results = {
@Result(name = SUCCESS, location = "/manage/control/navigation_url_add.jsp") })
public String toNavigationUrl() {
Long navId = super.getLongParamter("id", 0);
if(navId>0){
_navUrl = navigationUrlService.find(NavigationUrl.class, navId);
}
return SUCCESS;
}
@Action(value = "/manage/control/saveNavigationUrl", results = {
@Result(name = SUCCESS, type = "json", params = { "ignoreHierarchy", "false" }) })
public String saveNavigationUrl() {
Long navId = super.getLongParamter("id", 0);
int status = super.getIntParamter("status", 0);
String navTitle = super.getStr("navTitle", null);
String navUrl= super.getStr("navUrl", null);
String descrpition = super.getStr("descrpition", null);
int orderNum = super.getIntParamter("orderNum", 0);
if (navId > 0) {
_navUrl = navigationUrlService.find(NavigationUrl.class, navId);
}else{
if(_navUrl==null){
_navUrl = new NavigationUrl();
}
}
_navUrl.setNavTitle(navTitle);
_navUrl.setNavUrl(navUrl);
_navUrl.setDescription(descrpition);
_navUrl.setOrderNum(orderNum);
if (status == 0) {
_navUrl.setStatus(EnumYesOrNo.NO);
} else {
_navUrl.setStatus(EnumYesOrNo.YES);
}
if(navId>0){
navigationUrlService.update(_navUrl);
}else{
_navUrl.setCreateDate(new Date());
navigationUrlService.create(_navUrl);
}
message = "Success";
return SUCCESS;
}
@Action(value = "/manage/control/deleteNavigationUrl", results = {
@Result(name = SUCCESS, type = "json", params = { "ignoreHierarchy", "false" }) })
public String deleteNavigationUrl() {
Long navId = super.getLongParamter("id", 0);
try {
_navUrl = navigationUrlService.find(NavigationUrl.class, navId);
navigationUrlService.delete(NavigationUrl.class,_navUrl.getId());
message = "Success";
} catch (Exception ex) {
ex.printStackTrace();
message = "Delete failed!";
}
return SUCCESS;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public List
getNavUrlList() {
return navUrlList;
}
public void setNavUrlList(List
navUrlList) {
this.navUrlList = navUrlList;
}
public NavigationUrl get_navUrl() {
return _navUrl;
}
public void set_navUrl(NavigationUrl _navUrl) {
this._navUrl = _navUrl;
}
public NavigationUrlService getNavigationUrlService() {
return navigationUrlService;
}
public void setNavigationUrlService(NavigationUrlService navigationUrlService) {
this.navigationUrlService = navigationUrlService;
}
}
navigation_url.jsp
<%@page import="com.swdt.web.entity.enumtype.EnumUserRole"%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ include file="/include/tags.jsp"%> <%@ include file="/include/head.jsp"%>
<%@ include file="/include/menu.jsp"%><%@ include file="/include/foot.jsp"%>
出现的bug
15:33:02,199 ERROR Dispatcher:38 - Exception occurred during processing request: org.apache.struts2.json.JSONException: org.apache.struts2.json.JSONException: java.lang.reflect.InvocationTargetException
org.apache.struts2.json.JSONException: org.apache.struts2.json.JSONException: org.apache.struts2.json.JSONException: java.lang.reflect.InvocationTargetException
at org.apache.struts2.json.JSONWriter.bean(JSONWriter.java:246)
at org.apache.struts2.json.JSONWriter.processCustom(JSONWriter.java:178)
at org.apache.struts2.json.JSONWriter.process(JSONWriter.java:168)
at org.apache.struts2.json.JSONWriter.value(JSONWriter.java:134)
at org.apache.struts2.json.JSONWriter.write(JSONWriter.java:102)
at org.apache.struts2.json.JSONUtil.serialize(JSONUtil.java:116)
at org.apache.struts2.json.JSONResult.createJSONString(JSONResult.java:197)
at org.apache.struts2.json.JSONResult.execute(JSONResult.java:171)
at com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:371)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:275)
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:239)
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:239)
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:161)
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:563)
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:240)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
at com.swdt.web.filter.LoginFilter.doFilter(LoginFilter.java:48)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
at org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter.doFilterInternal(OpenEntityManagerInViewFilter.java:177)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:528)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1099)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:670)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1520)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1476)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:722)
Caused by: org.apache.struts2.json.JSONException: org.apache.struts2.json.JSONException: java.lang.reflect.InvocationTargetException
at org.apache.struts2.json.JSONWriter.bean(JSONWriter.java:246)
at org.apache.struts2.json.JSONWriter.processCustom(JSONWriter.java:178)
at org.apache.struts2.json.JSONWriter.process(JSONWriter.java:168)
at org.apache.struts2.json.JSONWriter.value(JSONWriter.java:134)
at org.apache.struts2.json.JSONWriter.add(JSONWriter.java:390)
at org.apache.struts2.json.JSONWriter.bean(JSONWriter.java:231)
... 80 more
Caused by: org.apache.struts2.json.JSONException: java.lang.reflect.InvocationTargetException
at org.apache.struts2.json.JSONWriter.bean(JSONWriter.java:246)
at org.apache.struts2.json.JSONWriter.processCustom(JSONWriter.java:178)
at org.apache.struts2.json.JSONWriter.process(JSONWriter.java:168)
at org.apache.struts2.json.JSONWriter.value(JSONWriter.java:134)
at org.apache.struts2.json.JSONWriter.add(JSONWriter.java:390)
at org.apache.struts2.json.JSONWriter.bean(JSONWriter.java:231)
... 85 more
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.apache.struts2.json.JSONWriter.bean(JSONWriter.java:226)
... 90 more
Caused by: java.lang.IllegalStateException: It is illegal to call this method if the current request is not in asynchronous mode (i.e. isAsyncStarted() returns false)
at org.apache.catalina.connector.Request.getAsyncContext(Request.java:1686)
... 95 more
org.apache.struts2.json.JSONException: org.apache.struts2.json.JSONException: org.apache.struts2.json.JSONException: java.lang.reflect.InvocationTargetException
at org.apache.struts2.json.JSONWriter.bean(JSONWriter.java:246)
at org.apache.struts2.json.JSONWriter.processCustom(JSONWriter.java:178)
at org.apache.struts2.json.JSONWriter.process(JSONWriter.java:168)
at org.apache.struts2.json.JSONWriter.value(JSONWriter.java:134)
at org.apache.struts2.json.JSONWriter.write(JSONWriter.java:102)
at org.apache.struts2.json.JSONUtil.serialize(JSONUtil.java:116)
at org.apache.struts2.json.JSONResult.createJSONString(JSONResult.java:197)
at org.apache.struts2.json.JSONResult.execute(JSONResult.java:171)
at com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:371)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:275)
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:239)
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:239)
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:161)
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:563)
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:240)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
at com.swdt.web.filter.LoginFilter.doFilter(LoginFilter.java:48)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
at org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter.doFilterInternal(OpenEntityManagerInViewFilter.java:177)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:528)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1099)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:670)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1520)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1476)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:722)
Caused by: org.apache.struts2.json.JSONException: org.apache.struts2.json.JSONException: java.lang.reflect.InvocationTargetException
at org.apache.struts2.json.JSONWriter.bean(JSONWriter.java:246)
at org.apache.struts2.json.JSONWriter.processCustom(JSONWriter.java:178)
at org.apache.struts2.json.JSONWriter.process(JSONWriter.java:168)
at org.apache.struts2.json.JSONWriter.value(JSONWriter.java:134)
at org.apache.struts2.json.JSONWriter.add(JSONWriter.java:390)
at org.apache.struts2.json.JSONWriter.bean(JSONWriter.java:231)
... 80 more
Caused by: org.apache.struts2.json.JSONException: java.lang.reflect.InvocationTargetException
at org.apache.struts2.json.JSONWriter.bean(JSONWriter.java:246)
at org.apache.struts2.json.JSONWriter.processCustom(JSONWriter.java:178)
at org.apache.struts2.json.JSONWriter.process(JSONWriter.java:168)
at org.apache.struts2.json.JSONWriter.value(JSONWriter.java:134)
at org.apache.struts2.json.JSONWriter.add(JSONWriter.java:390)
at org.apache.struts2.json.JSONWriter.bean(JSONWriter.java:231)
... 85 more
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.apache.struts2.json.JSONWriter.bean(JSONWriter.java:226)
... 90 more
Caused by: java.lang.IllegalStateException: It is illegal to call this method if the current request is not in asynchronous mode (i.e. isAsyncStarted() returns false)
at org.apache.catalina.connector.Request.getAsyncContext(Request.java:1686)
... 95 more
解决办法是在service getter方法加@JSON(serialize=false)注解,或者service才有Spring注解不提供getter 和setter方法
package com.swdt.manage.action;
import java.util.Date;
import java.util.List;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.ParentPackage;
import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.json.annotations.JSON;
import org.springframework.stereotype.Controller;
import com.swdt.manage.service.NavigationUrlService;
import com.swdt.sys.action.BaseAction;
import com.swdt.web.entity.enumtype.EnumYesOrNo;
import com.swdt.web.entity.navigation.NavigationUrl;
/**
* 导航推荐文字
*
* @ClassName: NavigationUrlAction
* @Description: TODO
* @author liugenxiang
*
*/
@Controller
@ParentPackage("json-default")
public class NavigationUrlAction extends BaseAction {
/*@Resource(name = NavigationUrlService.ID_NAME)*/
private NavigationUrlService navigationUrlService;
private String message;
private List
navUrlList;
private NavigationUrl _navUrl;
@Action(value = "/manage/control/toNavigationUrlPage", results = {
@Result(name = SUCCESS, location = "/manage/control/navigation_url.jsp") })
public String toNavigationUrlPage(){
return SUCCESS;
}
@Action(value = "/manage/control/navigationUrlList", results = {
@Result(name = SUCCESS, type = "json", params = { "ignoreHierarchy", "false" }) })
public String navigationUrlList() {
navUrlList = navigationUrlService.findList(null,super.getReqPages());
return SUCCESS;
}
@Action(value = "/manage/control/toNavigationUrl", results = {
@Result(name = SUCCESS, location = "/manage/control/navigation_url_add.jsp") })
public String toNavigationUrl() {
Long navId = super.getLongParamter("id", 0);
if(navId>0){
_navUrl = navigationUrlService.find(NavigationUrl.class, navId);
}
return SUCCESS;
}
@Action(value = "/manage/control/saveNavigationUrl", results = {
@Result(name = SUCCESS, type = "json", params = { "ignoreHierarchy", "false" }) })
public String saveNavigationUrl() {
Long navId = super.getLongParamter("id", 0);
int status = super.getIntParamter("status", 0);
String navTitle = super.getStr("navTitle", null);
String navUrl= super.getStr("navUrl", null);
String descrpition = super.getStr("descrpition", null);
int orderNum = super.getIntParamter("orderNum", 0);
if (navId > 0) {
_navUrl = navigationUrlService.find(NavigationUrl.class, navId);
}else{
if(_navUrl==null){
_navUrl = new NavigationUrl();
}
}
_navUrl.setNavTitle(navTitle);
_navUrl.setNavUrl(navUrl);
_navUrl.setDescription(descrpition);
_navUrl.setOrderNum(orderNum);
if (status == 0) {
_navUrl.setStatus(EnumYesOrNo.NO);
} else {
_navUrl.setStatus(EnumYesOrNo.YES);
}
if(navId>0){
navigationUrlService.update(_navUrl);
}else{
_navUrl.setCreateDate(new Date());
navigationUrlService.create(_navUrl);
}
message = "Success";
return SUCCESS;
}
@Action(value = "/manage/control/deleteNavigationUrl", results = {
@Result(name = SUCCESS, type = "json", params = { "ignoreHierarchy", "false" }) })
public String deleteNavigationUrl() {
Long navId = super.getLongParamter("id", 0);
try {
_navUrl = navigationUrlService.find(NavigationUrl.class, navId);
navigationUrlService.delete(NavigationUrl.class,_navUrl.getId());
message = "Success";
} catch (Exception ex) {
ex.printStackTrace();
message = "Delete failed!";
}
return SUCCESS;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public List
getNavUrlList() {
return navUrlList;
}
public void setNavUrlList(List
navUrlList) {
this.navUrlList = navUrlList;
}
public NavigationUrl get_navUrl() {
return _navUrl;
}
public void set_navUrl(NavigationUrl _navUrl) {
this._navUrl = _navUrl;
}
@JSON(serialize=false)
public NavigationUrlService getNavigationUrlService() {
return navigationUrlService;
}
public void setNavigationUrlService(NavigationUrlService navigationUrlService) {
this.navigationUrlService = navigationUrlService;
}
}
或者
package com.swdt.manage.action;
import java.util.Date;
import java.util.List;
import javax.annotation.Resource;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.ParentPackage;
import org.apache.struts2.convention.annotation.Result;
import org.springframework.stereotype.Controller;
import com.swdt.manage.service.NavigationUrlService;
import com.swdt.sys.action.BaseAction;
import com.swdt.web.entity.enumtype.EnumYesOrNo;
import com.swdt.web.entity.navigation.NavigationUrl;
/**
* 导航推荐文字
*
* @ClassName: NavigationUrlAction
* @Description: TODO
* @author liugenxiang
*
*/
@Controller
@ParentPackage("json-default")
public class NavigationUrlAction3 extends BaseAction {
@Resource(name = NavigationUrlService.ID_NAME)
private NavigationUrlService navigationUrlService;
private String message;
private List
navUrlList;
private NavigationUrl _navUrl;
@Action(value = "/manage/control/toNavigationUrlPage", results = {
@Result(name = SUCCESS, location = "/manage/control/navigation_url.jsp") })
public String toNavigationUrlPage(){
return SUCCESS;
}
@Action(value = "/manage/control/navigationUrlList", results = {
@Result(name = SUCCESS, type = "json", params = { "ignoreHierarchy", "false" }) })
public String navigationUrlList() {
navUrlList = navigationUrlService.findList(null,super.getReqPages());
return SUCCESS;
}
@Action(value = "/manage/control/toNavigationUrl", results = {
@Result(name = SUCCESS, location = "/manage/control/navigation_url_add.jsp") })
public String toNavigationUrl() {
Long navId = super.getLongParamter("id", 0);
if(navId>0){
_navUrl = navigationUrlService.find(NavigationUrl.class, navId);
}
return SUCCESS;
}
@Action(value = "/manage/control/saveNavigationUrl", results = {
@Result(name = SUCCESS, type = "json", params = { "ignoreHierarchy", "false" }) })
public String saveNavigationUrl() {
Long navId = super.getLongParamter("id", 0);
int status = super.getIntParamter("status", 0);
String navTitle = super.getStr("navTitle", null);
String navUrl= super.getStr("navUrl", null);
String descrpition = super.getStr("descrpition", null);
int orderNum = super.getIntParamter("orderNum", 0);
if (navId > 0) {
_navUrl = navigationUrlService.find(NavigationUrl.class, navId);
}else{
if(_navUrl==null){
_navUrl = new NavigationUrl();
}
}
_navUrl.setNavTitle(navTitle);
_navUrl.setNavUrl(navUrl);
_navUrl.setDescription(descrpition);
_navUrl.setOrderNum(orderNum);
if (status == 0) {
_navUrl.setStatus(EnumYesOrNo.NO);
} else {
_navUrl.setStatus(EnumYesOrNo.YES);
}
if(navId>0){
navigationUrlService.update(_navUrl);
}else{
_navUrl.setCreateDate(new Date());
navigationUrlService.create(_navUrl);
}
message = "Success";
return SUCCESS;
}
@Action(value = "/manage/control/deleteNavigationUrl", results = {
@Result(name = SUCCESS, type = "json", params = { "ignoreHierarchy", "false" }) })
public String deleteNavigationUrl() {
Long navId = super.getLongParamter("id", 0);
try {
_navUrl = navigationUrlService.find(NavigationUrl.class, navId);
navigationUrlService.delete(NavigationUrl.class,_navUrl.getId());
message = "Success";
} catch (Exception ex) {
ex.printStackTrace();
message = "Delete failed!";
}
return SUCCESS;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public List
getNavUrlList() {
return navUrlList;
}
public void setNavUrlList(List
navUrlList) {
this.navUrlList = navUrlList;
}
public NavigationUrl get_navUrl() {
return _navUrl;
}
public void set_navUrl(NavigationUrl _navUrl) {
this._navUrl = _navUrl;
}
}