我有一个使用JSF& amp;我也有一个EJB模块。 我在FORM&amp ;;中输入了一些数据。尝试通过我的会话bean将这些数据保存到DB。
步骤顺序如下。
1)用户使用表格
打开屏幕
2)他用数据填充表单字段
3)点击保存按钮
4)托管bean捕获所有输入的值&将它们添加到ArrayList(包含实体bean。如下所示)
for(String tagName : formTagNames){ // For all the tag names in the FORM
String value = request.getParameter(tagName); // Get the value of the field
myArrayList.add(new DynamicForm(tagName, value)); // Create a bean & add to list
}
5)然后将 myArrayList 发送到EJB模块以进行持久化。 (我也正确地完成了映射)
@EJB(name="DynamicFormFacadeLocal", mappedName="DynamicFormFacade/local")
private static DynamicFormFacadeLocal dynamicFormFacadeLocal;
// Send it to EJB module for persistence
dynamicFormFacadeLocal.addDynamicFormFields(myArrayList);
6)当我到达会话bean&尝试迭代 myArrayList
public Integer addDynamicFormFields(ArrayList<DynamicForm> formDetailsList) {
if(formDetailsList == null || formDetailsList.isEmpty()) return 0;
setupResources(); // Setting up all necessary connections & stuff
int count = 0;
try{
entityTransaction.begin();
for(DynamicForm form : formDetailsList){
entityManager.persist(form);
count++;
}
entityTransaction.commit();
}
catch(Exception e){
e.printStackTrace();
entityTransaction.rollback();
}
finally{
cleanupResources(); // Cleanup all connections & resources
}
return count;
}
7)但它给了我一个ClassCastException&amp;我不明白为什么.. !! :(
18:17:42,210 INFO [org.hibernate.impl.SessionFactoryImpl] building session factory
18:17:42,214 INFO [org.hibernate.impl.SessionFactoryObjectFactory] Not binding factory to JNDI, no JNDI name configured
18:17:42,219 ERROR [STDERR] java.lang.ClassCastException: com.test.dynamiform.beans.entity.DynamicForm cannot be cast to com.test.dynamiform.beans.entity.DynamicForm
18:17:42,219 ERROR [STDERR] at com.test.dynamiform.beans.session.DynamicFormFacade.addDynamicFormFields(DynamicFormFacade.java:32)
18:17:42,219 ERROR [STDERR] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
18:17:42,219 ERROR [STDERR] at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
18:17:42,219 ERROR [STDERR] at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
18:17:42,219 ERROR [STDERR] at java.lang.reflect.Method.invoke(Unknown Source)
18:17:42,220 ERROR [STDERR] at org.jboss.aop.joinpoint.MethodInvocation.invokeTarget(MethodInvocation.java:122)
.... etc
有人可以帮我这一个.. ??? 因为我正在发送和放弃,我完全迷失在这里迭代相同类型的对象...... :(
提前致谢。
Asela。
答案 0 :(得分:1)
你所谓的“Classloader Hell”。
对象的类型取决于Class以及加载它的类加载器。
您将在服务器中部署该类的两个副本,可能是Web App中的一个副本和EJB中的一个副本,并且不同的代码位从不同的类加载器中获取该类。
从Web App中删除一个,安排一些事情,以便Web App和EJB从同一个地方加载shaed类 - 通常在EJB中使用类是最好的选择。
但是,我不喜欢EJB“知道”关于Form对象,使用简单的DTO类可能更干净,如果相当讨厌。