"无法投射到"错误提升

时间:2011-12-08 11:05:19

标签: java jsp struts-1

我正在使用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();            

            }

2 个答案:

答案 0 :(得分:0)

您的表单bean配置为XCustomerPortalForm。在exposeInScope()中,您尝试将表单转换为X2AFormBase。看起来你有两个错误之一:

  1. XCustomerPortalForm不会扩展/实施X2AFormBase
  2. XCustomerPortalFormX2AFormBase从不同的类加载器/ 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。