我正在使用struts-config 1.2应用程序。在我的struts-config中,我有一个表单的声明条目,我使用这个表单进行一些操作。我首先用java 1.4版本编译了这个对象。那个时候工作正常。现在我修改为java版本1.6。我编译了所有对象。现在它抛出错误,因为我的表单类不能强制转换为我的扩展java类。我不知道这可能是由于版本更改。
请给我一个解决方案,我正在为此奋斗2天。
我的struct-config代码是:
<form-bean name="xCustomerPortalForm" type="com.portal.form.XCustomerPortalForm" />
...
<action path="/editXPortalCustomerNew"
type="com.xmportal.struts.X2AProcessBridgeAction"
parameter=""
name="xCustomerPortalForm"
scope="request"
validate="false">
<forward name="success_en" path="/jsp/XMPortalCustomerRegistration.jsp" />
<forward name="failure_en" path="/jsp/XMPortalCustomerRegistration.jsp" />
</action>
这是我的错误消息:
java.lang.ClassCastException: com.portal.form.XCustomerPortalForm cannot be cast to com.xmportal.struts.X2AFormBase
at com.xmportal.struts.X2AProcessBridgeAction.exposeInScope(X2AProcessBridgeAction.java:205)
at com.xmportal.struts.X2AProcessBridgeAction.checkDataSingle(X2AProcessBridgeAction.java:331)
at com.xmportal.struts.X2AProcessBridgeAction.checkData(X2AProcessBridgeAction.java:361)
at com.xmportal.struts.X2AProcessBridgeAction.checkOutcome(X2AProcessBridgeAction.java:618)
at com.xmportal.struts.X2AProcessBridgeAction.executeLogic(X2AProcessBridgeAction.java:864)
at org.apache.struts.scaffold.BaseHelperAction.executeLogic(Unknown Source)
at com.xmportal.struts.X2AProcessBridgeAction.execute(X2AProcessBridgeAction.java:886)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
...
我只在X2AProcessBridgeAction
中收到此对象的错误 try {
X2AFormBase passedForm = (X2AFormBase) form;
String loginKeyVal= passedForm.getLoginKey();
passedForm.set(bean);
} catch (Exception e) {
e.printStackTrace();
}
答案 0 :(得分:0)
您的表单bean配置为XCustomerPortalForm
。在exposeInScope()
中,您尝试将表单转换为X2AFormBase
。看起来你有两个错误之一:
XCustomerPortalForm
不会扩展/实施X2AFormBase
。XCustomerPortalForm
和X2AFormBase
从不同的类加载器/ jar加载,在这种情况下,您在JVM中有不同的类实例。答案 1 :(得分:0)
这很简单,
在struts-config.xml
中,您的action
(类型com.xmportal.struts.X2AProcessBridgeAction
)名称为xCustomerPortalForm
(键入com.portal.form.XCustomerPortalForm
)。这意味着,当Struts(ActionServlet
)将调用您的bean com.xmportal.struts.X2AProcessBridgeAction
方法时,ActionForm form
将始终属于com.portal.form.XCustomerPortalForm
类型。
因此,这种类型转换将始终失败,因为它是不兼容的类型:
X2AFormBase passedForm = (X2AFormBase) form;
Struts希望你这样做:
XCustomerPortalForm xCustomPortalForm = (XCustomerPortalForm)form;
我希望,这很清楚。您的Action仅映射到一个Form Bean。