0

私は Spring を初めて使用し、Spring 2.5 Web アプリを 3.2.3 にアップグレードしています。アプリのフロント ページから移動するとエラーが発生します。エラーは、Bean クラスの無効なプロパティ 'commandClass' です。この Web アプリは約 5 年間実行されているため、問題は Spring 2.5 から 3.2 への変更である必要があります。配線が間違っているに違いありません。アイデアはありますか?

完全なエラーは次のとおりです。

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

プロパティ値の設定エラー。ネストされた例外は org.springframework.beans.NotWritablePropertyException: Invalid property 'commandClass' of bean class [org.myorg.app.web.ScoreChangeController]: Bean プロパティ 'commandClass' is not writable or has an invalid setter method. セッターのパラメーターの型は、ゲッターの戻り値の型と一致していますか?

以下は、webapp-sevlet.xml の Bean 定義です。

<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"));

}

}
4

1 に答える 1

1

commandClassBean内にプロパティを注入しようとしていますがScoreChangeController、そのコントローラーでその名前のプロパティを確認できません。さらに、特定のコントローラーのサブクラスでもないため、継承の可能性もありません。

解決策: BeancommandClassからプロパティの注入を削除します。ScoreChangeController

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

または、 ScoreChangeController に command という名前の新しいプロパティを作成し、そのためのセッターとゲッターを作成します。

于 2013-07-31T20:30:17.297 に答える