2011-12-08 51 views
-1

我正在struts-config 1.2應用程序中工作。在我的struts-config中,我有一個表單的聲明條目,我使用這個表單進行一些操作。我首先用java 1.4版本編譯這個對象。那一次工作正常。現在我修改爲java版本1.6。我編譯了所有的對象。現在它拋出錯誤,因爲我的表單類不能轉換到我的擴展java類。我不知道這可能是由於版本更改。「不能投」到錯誤提升

請給我一個解決方案,我爲此掙扎了2天。

我的結構,配置代碼:

<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

此外,'com.xmportal.struts.X2AProcessBridgeAction.exposeInScope'的代碼(特別是第205行,因爲這是異常來自的行)。 –

+0

向我們顯示com.portal.form.XCustomerPortalForm和com.xmportal.struts.X2AFormBase的代碼。第一個應該擴展或實施第二個。 –

回答

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; 

我希望,這是明確的。您的操作僅映射到一個Form Bean。

0

您的形式bean配置爲XCustomerPortalForm。在您的exposeInScope()中,您試圖將表單轉換爲X2AFormBase。看起來你有兩個錯誤之一:

  1. XCustomerPortalForm沒有擴展/執行X2AFormBase
  2. XCustomerPortalFormX2AFormBase是從不同的類加載器/ jar中加載的,在這種情況下,您在JVM中擁有不同的類實例。
+0

我檢查了我的代碼,我有擴展以及x2aformbase的實現。而且teir的路徑也是正確的。還有其他可能性嗎? – Nagarajan

+0

@Nagarajan是否存在於同一個jar中並且由同一個類加載器加載的這些類? – shams

+0

是假裝它是thr .. bcoz爲其他形式相同的過程工作正常。 – Nagarajan