BeanNotOfRequiredTypeException错误
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.

看不懂。。。
Thanks! was hery helpful.