这个问题网上回答很多了,但是我的问题一直没有得到解决。
完整的异常信息:Class org.apache.struts2.json.JSONWriter can not access a member of class org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper with modifiers "public"。
Action代码:
public class QManageAction extends ActionSupport {
@Autowired
private QuestionnaireManageService questionnaireManageService;
private Map<String, Object> dataMap;
public QManageAction(){
dataMap = new HashMap<>();
}
public String displayAllQ() {
dataMap.clear();
Integer userId = 1;
Set<Questionnaire> questionnaires = questionnaireManageService.getQuestionnairesByUserId(userId);
dataMap.put("success", true);
dataMap.put("questionnaires", questionnaires);
return SUCCESS;
}
public String changeQStatus() {
dataMap.clear();
Integer questionnaireId = 1;
Integer changedStatus = 1;
Questionnaire changedStatusQ = questionnaireManageService.modifyQuestionnaireStatusById(questionnaireId, changedStatus);
dataMap.put("success", true);
dataMap.put("changedStatusQ", changedStatusQ);
return SUCCESS;
}
public Map<String, Object> getDataMap() {
return dataMap;
}
}
Service代码:
public class QuestionnaireManageService {
@Autowired
private UserBasicDAO userBasicDAO;
@Autowired
private QuestionnaireDAO questionnaireDAO; //两个DAO是Hibernate自动生成的。
public Set<Questionnaire> getQuestionnairesByUserId(Integer userId) {
Set<Questionnaire> resultQuestionnaires = new HashSet<>();
UserBasic userBasic = (UserBasic) userBasicDAO.findById(userId);
Set<Survey> userSurveys = userBasic.getSurveies();
Iterator<Survey> surveysIterator = userSurveys.iterator();
while (surveysIterator.hasNext()) {
Survey survey = (Survey) surveysIterator.next();
Questionnaire questionnaire = (new ArrayList<Questionnaire>(survey.getQuestionnaires())).get(0);
resultQuestionnaires.add(questionnaire);
}
return resultQuestionnaires;
}
public Questionnaire modifyQuestionnaireStatusById(Integer questionnaireId, Integer changedStatus) {
Questionnaire questionnaire = questionnaireDAO.findById(questionnaireId);
if (questionnaire.getQnaireStatus() != changedStatus) {
questionnaire.setQnaireStatus(changedStatus);
} else {
}
return questionnaire;
}
}
奇怪的是:我调用action里面的displayAllQ方法是成功的。而调用changeQStatus则是失败的,并报如上异常。
网上的解答方向是:action里面的接口没有实现序列化方法,要对其get方法进行处理。但是不符合我的情况。
是否可能是延时加载lazy=“false”的原因呢?
------解决思路----------------------
我来拿分哈!