«не может быть приведен к» ошибка - PullRequest
0 голосов
/ 08 декабря 2011

Я работаю в приложении 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 голосов
/ 12 декабря 2011

Это действительно просто,

В вашем 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;

Надеюсь, это понятно.Ваше действие сопоставлено только с одним компонентом формы.

0 голосов
/ 09 декабря 2011

Ваш компонент формы настроен на XCustomerPortalForm. В вашем exposeInScope() вы пытаетесь привести форму к X2AFormBase. Похоже, у вас есть одна из двух ошибок:

  1. XCustomerPortalForm не расширяется / не реализуется X2AFormBase.
  2. XCustomerPortalForm и X2AFormBase загружаются из разных загрузчиков классов / jar, в этом случае у вас есть разные экземпляры классов в JVM.
...