我们只是切换到Glassfish V2。我们现在在设置会话属性时会出错。setAttribute:不可序列化的属性(Java对象序列化)
错误是:
java.lang.IllegalArgumentException: PWC2788: setAttribute: Non-serializable attribute
代码是:
getRequest().getSession().setAttribute("questionsForUser", getQuestions());
getQuestions()仅仅是一个简单的getter这是一个名为 '家长行动' 的抽象类中....所以使getQuestions()一个序列化对象做我的课需要实现序列化的?:
public List getQuestions() {
return questions;
}
- 我们如何才能使这个对象 可序列化?
- 这是一个很好的做法,只将 序列化的对象在会话中(因为Glassfish似乎需要 )?
- 会话有 交换在用户序列化 对象之间的风险吗?
编辑:我使用的ORM(iBatis的)
更多信息有关 “问题”
二传手:
public void setQuestions(List questions) {
this.questions = questions;
}
设置器调用此方法中。此方法调用iBatis映射。
public void prepareQuestions()
{
setExamIfaceDAO((SecurityExamIfaceDAO)ApplicationInitializer.getApplicationContext().getBean("securityExamIfaceDAO"));
String userRole = questionsBasedOnUserRole();
int questionsToBeShown = 0;
if (userRole.equalsIgnoreCase("C"))
questionsToBeShown = 15;
else if (userRole.equalsIgnoreCase("U"))
questionsToBeShown = 10;
List local_questions = getExamIfaceDAO().getSecurityQuestions(userRole);
Collections.shuffle(local_questions);
if (local_questions.size()>=questionsToBeShown)
setQuestions(local_questions.subList(0, questionsToBeShown));
getRequest().getSession().setAttribute("questionsForUser", getQuestions());
}
对于有类似问题的人非静态非瞬态字段:当你在列表上做一个子列表时,你可以找回没有实现Serializable的RandomAccessList。所以解决方案是将所有内容添加到像ArrayList这样的搜索列表中。 – Omnipresent 2009-11-02 21:51:49