2013-07-31 86 views
0

我是Spring的新手,並且正在將Spring 2.5 Web應用升級到3.2.3。我遇到了應用程序首頁的錯誤。 錯誤是Bean類的無效屬性'commandClass'。這個網絡應用程序已運行約5年,所以 問題必須是春季2.5至3.2的變化。我必須有一些線路錯誤,有什麼想法?Spring 2.5到3.2升級錯誤:bean類的無效屬性'commandClass'

完整的錯誤是:

Error creating bean with name '/new_candidate.html' defined in ServletContext resource [/WEB-INF/webapp-servlet.xml]: 

錯誤設置的屬性值; 嵌套異常是org.springframework.beans.NotWritablePropertyException: bean類的屬性'commandClass'無效屬性'org.myorg.app.web.ScoreChangeController]: Bean屬性'commandClass'不可寫或具有無效的setter方法。 setter的參數類型是否與getter的返回類型相匹配?

下面是從web應用程序,sevlet.xml豆DEF:

<bean name="/new_candidate.html" class="org.myorg.app.web.ScoreChangeController" scope="session"> 
    <property name="commandClass" value="org.myorg.app.model.Database"/> 
    <property name="formView" value="generic"/> 
    <property name="candidateManager" ref="candidateManager"/> 
</bean> 

控制器是:

package org.myorg.app.web; 

import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

import org.myorg.app.model.Database; 
import org.myorg.app.service.CandidateManager; 

import org.springframework.web.servlet.ModelAndView; 

import org.springframework.web.servlet.view.RedirectView; 
import org.springframework.web.bind.ServletRequestDataBinder; 
import org.springframework.validation.BindException; 
import org.springframework.web.util.WebUtils; 
import org.springframework.stereotype.Controller; 
import org.springframework.web.bind.annotation.RequestMapping; 


public class ScoreChangeController 
{ 

private CandidateManager candidateManager; 


protected Object formBackingObject(HttpServletRequest request) throws Exception { 

    Database defaultDatabase = new Database(); 
    defaultDatabase.setApptNo("16 digits"); 
    defaultDatabase.setAccessionNo("8 digits"); 
    defaultDatabase.setTstPkgId("12345678912345678912345"); 
    return defaultDatabase; 
} 


protected void initBinder(HttpServletRequest request, ServletRequestDataBinder binder) throws Exception { 
     Database database = (Database)binder.getTarget(); 
    } 

public CandidateManager getCandidateManager() { 
    return candidateManager; 
} 

public void setCandidateManager(CandidateManager candidateManager) { 
    this.candidateManager = candidateManager; 
} 

public ModelAndView onSubmit(HttpServletRequest req, HttpServletResponse res, Object command, BindException errors) throws Exception { 

    if(WebUtils.hasSubmitParameter(req, "retrieve")) 
    { 
     candidateManager.retrieveData((Database)command); 

    } 
    return new ModelAndView(new RedirectView("success.jsp")); 

} 

} 

回答

1

您試圖注入ScoreChangeController豆內財產commandClass,但我無法在該控制器中看到具有該名稱的任何屬性,而且它也不是任何特定控制器的子類,因此也沒有繼承的可能性。

解決方法:從ScoreChangeController bean中刪除注入commandClass屬性。

<bean name="/new_candidate.html" class="org.myorg.app.web.ScoreChangeController" scope="session"> 
<property name="formView" value="generic"/> 
<property name="candidateManager" ref="candidateManager"/> 

或創建您的ScoreChangeController具有名稱作爲命令的新屬性,並創建了getter和setter方法。

+0

commandClass屬性是從Spring 2.5實現中遺留下來的,它必須在3.2中被棄用。我會嘗試刪除該屬性。 – Jim

+0

和我正在觀察屬性'formView'的東西。 - 謝謝 – saurav

+0

當我拿出commandClass和FormView時,我得到: – Jim

相關問題