【发布时间】:2009-11-02 16:40:07
【问题描述】:
我们刚刚切换到 Glassfish V2。我们现在在设置会话属性时遇到错误。
错误是:
java.lang.IllegalArgumentException: PWC2788: setAttribute: Non-serializable attribute
代码是:
getRequest().getSession().setAttribute("questionsForUser", getQuestions());
getQuestions() 只是一个简单的 getter,它位于名为“Parent Action”的抽象类中......所以要使 getQuestions() 成为序列化对象,我的类需要实现可序列化吗?:
public List getQuestions() {
return questions;
}
- 我们如何制作这个对象 可序列化?
- 只放 会话中的序列化对象(如 Glassfish 似乎需要)?
- 会话是否存在风险 在用户之间交换序列化 对象?
编辑:我正在使用 ORM (iBatis)
关于“问题”的更多信息
二传手:
public void setQuestions(List questions) {
this.questions = questions;
}
setter 在这个方法中被调用。此方法调用 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());
}
【问题讨论】:
-
对于任何有类似问题的人:当您在列表上执行子列表时,您会返回未实现可序列化的 RandomAccessList。所以解决方案是将所有内容添加到像 ArrayList 这样的序列化列表中。
标签: java serialization glassfish