各位大神,,小弟遇到一个问题,困扰了下午了
问题是,目前使用的是ssh框架,然后ajax访问后台action的requestTodoListByMOA的方法,这个方法的返回类型是ActionForward的,问题就在这里,我想把返回类型改成JSONObject,因为前台要json对象,但是我改了之后会报错,报错如下
[ERROR] 2017-08-22 17:59:26,609 org.apache.struts.actions.DispatchAction - Action[/moaAction] invalid return type for method 'requestTodoListByMOA'
java.lang.ClassCastException: net.sf.json.JSONObject cannot be cast to org.apache.struts.action.ActionForward
at org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:276)
at org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:196)
at org.springframework.web.struts.DelegatingActionProxy.execute(DelegatingActionProxy.java:110)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:421)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:226)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1164)
at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:397)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.basic.common.XssFilter.doFilter(XssFilter.java:19)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.jav我也不知道是什么原因,我现在把我的action和配置文件贴出来,大神帮我瞅瞅这是action(引入的service和set、get被我在这删掉了)
public class MoaAction extends DispatchAction {
/**
* 获取待办列表的方法
*
* @param mapping
* @param form
* @param request
* @param response
* @return
* @throws IOException
* @throws ParseException
*/
public JSONObject requestTodoListByMOA(ActionMapping mapping,ActionForm form,
HttpServletRequest request, HttpServletResponse response) throws IOException, ParseException {
System.out.println("-----------------------------------------change--------------------------------------");
Long beginTime = System.currentTimeMillis(); // 加载页面的起始时间戳
SimpleDateFormat df = new SimpleDateFormat("yyyyMMddhhmmss");
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");
//User su = (User) request.getSession().getAttribute("User");
String userAccount = request.getParameter("userId");
//String userAccount = su.getSysUser().getAccount();
String pageNum = request.getParameter("pageNum"); // 页码
String pageCount = request.getParameter("pageCount"); // 每页条数
String flag = request.getParameter("flag");//0:待办 1:已办
String timeStamp = request.getParameter("timeStamp");
Date timeStampDate = null;
PrintWriter writer = response.getWriter();
String message = null;
try {
int currentPage = 1;
int rowCount = 100;
if (!COMMON.isEmpty(pageNum)) {
currentPage = Integer.valueOf(pageNum);
}
if (!COMMON.isEmpty(pageCount)) {
rowCount = Integer.valueOf(pageCount);
}
// 计算分页
int startPos = (currentPage - 1) * rowCount + 0;
int endPos = currentPage * rowCount;
// 筛选手机端需要的业务类型
/*String sql = "select CODE from SYS_DIC_ITEM where KIND='businessType' ";
List typeList = (List) workFlowTemplateService.findBySQLFilter(sql);
String businessType = typeList.toString().replace("[", "'").replace("]", "'").replaceAll(", ", "','");*/
//拼接查询条件
String filter = " and jh.BUSINESSTYPE_ in ('provDailyAdjustType','dailyAdjustType','dailyAdjustType_same','oddAdjustTypeNo','oddAdjustTypeUn') and jh.current_<>jh.DRAFTER_ ";
String userId =""; //登录用户id
Map todolist = new HashMap();//拼接表头
Map top = new HashMap();//拼接表头
if(!COMMON.isEmpty(userAccount)){
String hql = "from SysUserVOImpl where account=?";
List<SysUserVOImpl> userList = sysUserService.getSysUserDAO()
.getHibernateTemplate().find(hql, userAccount);
if (null != userList && userList.size() > 0) {
userId = userList.get(0).getUserId();
} else {
todolist.put("todolist", "");
top.put("responsecode", "0");
top.put("responsemessage", "用户不存在!");
top.put("response", todolist);
writer.print(JSONObject.fromObject(top));
writer.flush();
writer.close();
return null;
}
} else {
todolist.put("todolist", "");
top.put("responsecode", "0");
top.put("responsemessage", "用户名为空!");
top.put("response", todolist);
writer.print(JSONObject.fromObject(top));
writer.flush();
writer.close();
return null;
}
List jsonList = new ArrayList(); // 存放todolist子集数据
List list = null;
if(flag=="0"||"0".endsWith(flag)){
if(timeStamp==null||"".equals(timeStamp)){
list = workFlowTemplate.findWorkItemByActorId(userId,filter, startPos, endPos);
}else{
timeStampDate = sdf.parse(sdf.format(Long.valueOf(timeStamp)));
// 查询待办信息
list = workFlowTemplate.findWorkItemByActorIdNew(userId,filter, startPos, endPos,timeStampDate);
}
}else{
if(timeStamp==null||"".equals(timeStamp)){
list = workFlowTemplate.findUnWorkItemByActorId(userId, filter, startPos, endPos, null);
}else{
timeStampDate = sdf.parse(sdf.format(Long.valueOf(timeStamp)));
//查询已办
list = workFlowTemplate.findUnWorkItemByActorIdNew(userId, filter, startPos, endPos, null,timeStampDate);
}
}
if (null != list && list.size() > 0) {
for (int i = 0; i < list.size(); i++) {
JbpmWithdrawalHelpVOImpl temp = (JbpmWithdrawalHelpVOImpl) list
.get(i);
Map map = new HashMap();//存放todolist里面的详情
map.put("taskId", String.valueOf(temp.getTaskId()));
map.put("businessId", temp.getBusinessId());
map.put("flowTitle", temp.getTitle());
map.put("flowName", temp.getName());
map.put("submitName", temp.getFromActorName());
String start = temp.getStart()==null?null:sdf1.format(temp.getStart());
map.put("submitTime", start);
if(timeStamp==null||"".equals(timeStamp)){
map.put("timeStamp", df.format(beginTime));
}else{
map.put("timeStamp", timeStamp);
}
if("oddAdjustTypeNo".equals(temp.getBusinessType())||"oddAdjustTypeUn".equals(temp.getBusinessType())){
map.put("batchSumbit", false);
}else{
map.put("batchSumbit", true);
}
System.out.println("--------------------------------------"+df.format(temp.getCreate())+"----------------------------------");
jsonList.add(map);
}
}
todolist.put("todolist", jsonList);
todolist.put("listSize", list.size());
top.put("responsecode", "1");
top.put("responsemessage", "success");
top.put("response", todolist);
JSONObject jsonArray2 = JSONObject.fromObject(top);
return jsonArray2;
} catch (Exception e) {
message = e.getMessage();
e.printStackTrace();
} finally {
if (null != writer) {
try {
if (null != message) {
Map todolist = new HashMap();//拼接表头
Map top = new HashMap();//拼接表头
todolist.put("todolist", "");
top.put("responsecode", "0");
top.put("responsemessage", "查询待办列表信息出错!");
top.put("response", todolist);
writer.print(JSONObject.fromObject(top));
}
writer.flush();
writer.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
System.out.println("=====查询代办列表执行速度(毫秒):======"
+ (System.currentTimeMillis() - beginTime));
return null;
}下面是spring-action的配置的配置xml<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"><beans> <bean name="/moaAction" class="com.eskytech.budget.moa.MoaAction">
<property name="workFlowTemplate" ref="workflowTemplate" />
<property name="workFlowTemplateService" ref="workFlowTemplateService" />
<property name="sysUserService" ref="sysUserService" />
<property name="sysOrgService" ref="sysOrgService"/>
<property name="bdgtSubjDeptService" ref="bdgtSubjDeptService"/>
<property name="dprojBudgetService" ref="dprojBudgetService" />
<property name="dailyBudgetHiAdjustService" ref="dailyBudgetHiAdjustService"/>
<property name="dailyBudgetAdjustDAO" ref="dailyBudgetAdjustDAO" />
<property name="dailyBudgetAdjustService" ref="dailyBudgetAdjustService" />
<property name="budgetIndexHiAdService" ref="budgetIndexHiAdService" />
<property name="bItemCommentService" ref="bItemCommentService" />
<property name="budgetExamineHiService" ref="budgetExamineHiServiceImpl"/>
<property name="pojoTemplateService" ref="workFlowTemplateService" />
<property name="budgetDetailHiAdService" ref="budgetDetailHiAdService" />
<property name="templateParseTransition" ref="templateParseTransitionService" />
<property name="messagePushService" ref="messagePushService" />
<property name="jbpmWorkFlowUtils" ref="jbpmWorkFlowUtils" />
</bean></beans>这是struts-config.xml的配置<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd">
<struts-config>
<form-beans>
<form-bean name="baseForm" type="com.basic.common.BaseForm" />
<form-bean name="tInquirybudgetinfosrvForm" type="com.eskytech.budget.ws.append.vo.TInquirybudgetinfosrvVOImpl"/>
</form-beans>
<global-forwards>
<forward name="error" path="/system/query/error.jsp" />
</global-forwards>
<action-mappings> <action path="/moaAction" scope="request" parameter="method"
type="org.springframework.web.struts.DelegatingActionProxy">
</action>
</action-mappings>
</struts-config>然后我就不知道为啥报错了
问题是,目前使用的是ssh框架,然后ajax访问后台action的requestTodoListByMOA的方法,这个方法的返回类型是ActionForward的,问题就在这里,我想把返回类型改成JSONObject,因为前台要json对象,但是我改了之后会报错,报错如下
[ERROR] 2017-08-22 17:59:26,609 org.apache.struts.actions.DispatchAction - Action[/moaAction] invalid return type for method 'requestTodoListByMOA'
java.lang.ClassCastException: net.sf.json.JSONObject cannot be cast to org.apache.struts.action.ActionForward
at org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:276)
at org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:196)
at org.springframework.web.struts.DelegatingActionProxy.execute(DelegatingActionProxy.java:110)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:421)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:226)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1164)
at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:397)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.basic.common.XssFilter.doFilter(XssFilter.java:19)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.jav我也不知道是什么原因,我现在把我的action和配置文件贴出来,大神帮我瞅瞅这是action(引入的service和set、get被我在这删掉了)
public class MoaAction extends DispatchAction {
/**
* 获取待办列表的方法
*
* @param mapping
* @param form
* @param request
* @param response
* @return
* @throws IOException
* @throws ParseException
*/
public JSONObject requestTodoListByMOA(ActionMapping mapping,ActionForm form,
HttpServletRequest request, HttpServletResponse response) throws IOException, ParseException {
System.out.println("-----------------------------------------change--------------------------------------");
Long beginTime = System.currentTimeMillis(); // 加载页面的起始时间戳
SimpleDateFormat df = new SimpleDateFormat("yyyyMMddhhmmss");
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");
//User su = (User) request.getSession().getAttribute("User");
String userAccount = request.getParameter("userId");
//String userAccount = su.getSysUser().getAccount();
String pageNum = request.getParameter("pageNum"); // 页码
String pageCount = request.getParameter("pageCount"); // 每页条数
String flag = request.getParameter("flag");//0:待办 1:已办
String timeStamp = request.getParameter("timeStamp");
Date timeStampDate = null;
PrintWriter writer = response.getWriter();
String message = null;
try {
int currentPage = 1;
int rowCount = 100;
if (!COMMON.isEmpty(pageNum)) {
currentPage = Integer.valueOf(pageNum);
}
if (!COMMON.isEmpty(pageCount)) {
rowCount = Integer.valueOf(pageCount);
}
// 计算分页
int startPos = (currentPage - 1) * rowCount + 0;
int endPos = currentPage * rowCount;
// 筛选手机端需要的业务类型
/*String sql = "select CODE from SYS_DIC_ITEM where KIND='businessType' ";
List typeList = (List) workFlowTemplateService.findBySQLFilter(sql);
String businessType = typeList.toString().replace("[", "'").replace("]", "'").replaceAll(", ", "','");*/
//拼接查询条件
String filter = " and jh.BUSINESSTYPE_ in ('provDailyAdjustType','dailyAdjustType','dailyAdjustType_same','oddAdjustTypeNo','oddAdjustTypeUn') and jh.current_<>jh.DRAFTER_ ";
String userId =""; //登录用户id
Map todolist = new HashMap();//拼接表头
Map top = new HashMap();//拼接表头
if(!COMMON.isEmpty(userAccount)){
String hql = "from SysUserVOImpl where account=?";
List<SysUserVOImpl> userList = sysUserService.getSysUserDAO()
.getHibernateTemplate().find(hql, userAccount);
if (null != userList && userList.size() > 0) {
userId = userList.get(0).getUserId();
} else {
todolist.put("todolist", "");
top.put("responsecode", "0");
top.put("responsemessage", "用户不存在!");
top.put("response", todolist);
writer.print(JSONObject.fromObject(top));
writer.flush();
writer.close();
return null;
}
} else {
todolist.put("todolist", "");
top.put("responsecode", "0");
top.put("responsemessage", "用户名为空!");
top.put("response", todolist);
writer.print(JSONObject.fromObject(top));
writer.flush();
writer.close();
return null;
}
List jsonList = new ArrayList(); // 存放todolist子集数据
List list = null;
if(flag=="0"||"0".endsWith(flag)){
if(timeStamp==null||"".equals(timeStamp)){
list = workFlowTemplate.findWorkItemByActorId(userId,filter, startPos, endPos);
}else{
timeStampDate = sdf.parse(sdf.format(Long.valueOf(timeStamp)));
// 查询待办信息
list = workFlowTemplate.findWorkItemByActorIdNew(userId,filter, startPos, endPos,timeStampDate);
}
}else{
if(timeStamp==null||"".equals(timeStamp)){
list = workFlowTemplate.findUnWorkItemByActorId(userId, filter, startPos, endPos, null);
}else{
timeStampDate = sdf.parse(sdf.format(Long.valueOf(timeStamp)));
//查询已办
list = workFlowTemplate.findUnWorkItemByActorIdNew(userId, filter, startPos, endPos, null,timeStampDate);
}
}
if (null != list && list.size() > 0) {
for (int i = 0; i < list.size(); i++) {
JbpmWithdrawalHelpVOImpl temp = (JbpmWithdrawalHelpVOImpl) list
.get(i);
Map map = new HashMap();//存放todolist里面的详情
map.put("taskId", String.valueOf(temp.getTaskId()));
map.put("businessId", temp.getBusinessId());
map.put("flowTitle", temp.getTitle());
map.put("flowName", temp.getName());
map.put("submitName", temp.getFromActorName());
String start = temp.getStart()==null?null:sdf1.format(temp.getStart());
map.put("submitTime", start);
if(timeStamp==null||"".equals(timeStamp)){
map.put("timeStamp", df.format(beginTime));
}else{
map.put("timeStamp", timeStamp);
}
if("oddAdjustTypeNo".equals(temp.getBusinessType())||"oddAdjustTypeUn".equals(temp.getBusinessType())){
map.put("batchSumbit", false);
}else{
map.put("batchSumbit", true);
}
System.out.println("--------------------------------------"+df.format(temp.getCreate())+"----------------------------------");
jsonList.add(map);
}
}
todolist.put("todolist", jsonList);
todolist.put("listSize", list.size());
top.put("responsecode", "1");
top.put("responsemessage", "success");
top.put("response", todolist);
JSONObject jsonArray2 = JSONObject.fromObject(top);
return jsonArray2;
} catch (Exception e) {
message = e.getMessage();
e.printStackTrace();
} finally {
if (null != writer) {
try {
if (null != message) {
Map todolist = new HashMap();//拼接表头
Map top = new HashMap();//拼接表头
todolist.put("todolist", "");
top.put("responsecode", "0");
top.put("responsemessage", "查询待办列表信息出错!");
top.put("response", todolist);
writer.print(JSONObject.fromObject(top));
}
writer.flush();
writer.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
System.out.println("=====查询代办列表执行速度(毫秒):======"
+ (System.currentTimeMillis() - beginTime));
return null;
}下面是spring-action的配置的配置xml<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"><beans> <bean name="/moaAction" class="com.eskytech.budget.moa.MoaAction">
<property name="workFlowTemplate" ref="workflowTemplate" />
<property name="workFlowTemplateService" ref="workFlowTemplateService" />
<property name="sysUserService" ref="sysUserService" />
<property name="sysOrgService" ref="sysOrgService"/>
<property name="bdgtSubjDeptService" ref="bdgtSubjDeptService"/>
<property name="dprojBudgetService" ref="dprojBudgetService" />
<property name="dailyBudgetHiAdjustService" ref="dailyBudgetHiAdjustService"/>
<property name="dailyBudgetAdjustDAO" ref="dailyBudgetAdjustDAO" />
<property name="dailyBudgetAdjustService" ref="dailyBudgetAdjustService" />
<property name="budgetIndexHiAdService" ref="budgetIndexHiAdService" />
<property name="bItemCommentService" ref="bItemCommentService" />
<property name="budgetExamineHiService" ref="budgetExamineHiServiceImpl"/>
<property name="pojoTemplateService" ref="workFlowTemplateService" />
<property name="budgetDetailHiAdService" ref="budgetDetailHiAdService" />
<property name="templateParseTransition" ref="templateParseTransitionService" />
<property name="messagePushService" ref="messagePushService" />
<property name="jbpmWorkFlowUtils" ref="jbpmWorkFlowUtils" />
</bean></beans>这是struts-config.xml的配置<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd">
<struts-config>
<form-beans>
<form-bean name="baseForm" type="com.basic.common.BaseForm" />
<form-bean name="tInquirybudgetinfosrvForm" type="com.eskytech.budget.ws.append.vo.TInquirybudgetinfosrvVOImpl"/>
</form-beans>
<global-forwards>
<forward name="error" path="/system/query/error.jsp" />
</global-forwards>
<action-mappings> <action path="/moaAction" scope="request" parameter="method"
type="org.springframework.web.struts.DelegatingActionProxy">
</action>
</action-mappings>
</struts-config>然后我就不知道为啥报错了
解决方案 »
- 网站出错咯!!!!
- mysql 备份数据 data 还原的问题,事关重大,感激涕零...
- org.hibernate.MappingException: could not instantiate id generator ..郁闷了一晚上...!!!!!!!!!!!!!!!!!!!
- 发生在我同学的同学身边的事。。太黑暗了,请求管理员保护好这帖子啊
- 不解决不睡觉~~找个高手来解决下?
- 求JSP实现图片水印效果代码~~
- 下拉列表框的问题
- 哪里有好的JSP论坛的源代码?
- 請問此錯誤何解...
- jsp下如何用ActiveX控件
- 0基础入门java一个半月,求大神指点迷津
- 谁能给我发个httpclient实现302跳转的例子,谢谢
但你可以尝试
1.返回值改成void
2.将jsonObject转成json字符串,然后response写进流,大概如下代码 response.setCharacterEncoding("UTF-8");
response.setContentType("application/json");
response.setHeader("progma", "no-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
PrintWriter pw = response.getWriter();
String text = JSON.toJSONString(restObject);
pw.write(text);
pw.close();
<package name="resultJson" namespace="/" extends="json-default">
<action name="resultJson" class="com.mz.action.JsonAction">
<result name="success" type="json">
<!--root是ognl表达式的一部分不能更换 -->
<param name="root">user</param>
</result>
</action>
</package>
将json对象放到PrintWriter,最后return null。
//User类转JSON
String json = mapper.writeValueAsString(insertbbxx);
return json;
我是这么做的,对象转json
前台ajax 参数定义dataType: json