BeanNotOfRequiredTypeException错误

2008年12月6日 | 分类: java | 标签:

Have you ever encountered the following error message?

org.springframework.beans.factory.BeanNotOfRequiredTypeException: Bean named 'add' must be of type [org.springframework.web.servlet.View], but was actually of type [your.package.Controller]
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:309)
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:174)
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:227)
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:174)
org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:887)
org.springframework.web.servlet.view.ResourceBundleViewResolver.loadView(ResourceBundleViewResolver.java:188)
org.springframework.web.servlet.view.AbstractCachingViewResolver.createView(AbstractCachingViewResolver.java:159)
org.springframework.web.servlet.view.AbstractCachingViewResolver.resolveViewName(AbstractCachingViewResolver.java:78)
org.springframework.web.servlet.DispatcherServlet.resolveViewName(DispatcherServlet.java:1190)
org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1139)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:900)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:808)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:476)
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:431)
javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

I had that when I tried to set up two view handlers in my Spring configuration file. It was working when I only had SimpleUrlHandlerMapping, until I added ResourceBundleViewResolver. Here was my problem configurations.

<bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="alwaysUseFullPath" value="true" />
<property name="mappings">
<props>
<prop key="/add.htm">add</prop>
<prop key="/edit.htm">edit</prop>
</props>
</property>
</bean>
<bean id="viewResolver" class="org.springframework.web.servlet.view.ResourceBundleViewResolver">
<property name="order" value="1"/>
<property name="basename" value="views"/>
</bean>
<bean id="add" class="your.package.Controller">
<property name="service" ref="service" />
<property name="formView" value="add" />
<property name="successView" value="add" />
<property name="commandClass" value="" />
<property name="commandName" value="" />
<property name="validator" ref="validator" />
</bean>

<bean id="edit" class="your.package.Controller2">
<property name="service" ref="service" />
<property name="formView" value="edit" />
<property name="successView" value="edit" />
<property name="commandClass" value="" />
<property name="commandName" value="" />
<property name="validator" ref="validator" />
</bean>

The problem was silly. It is because the names of jsp pages for both add and edit success views are the same as the bean names for both controllers. So Spring tried to use the controller to display the controller returned result.

  1. 2008年12月9日14:47

    看不懂。。。

  2. gb
    2010年1月5日06:30

    Thanks! was hery helpful.