Hi
I've hit a problem using the AbstractWizardFormController (AddClaimLineController) within a portlet when returning from a processCancel method.
My processCancelMethod looks like this:
This has the effect of returning the request back to a SimpleFormController. However in a SimpleFormController the formBackingObject method is not invoked.Code:protected void processCancel(ActionRequest request, ActionResponse response, Object command, BindException errors) throws Exception { logger.debug("in processCancel"); response.setRenderParameter("action", "editClaim"); }
Instead flow returns directly to onSubmitRender:
It seems to me that Spring MVC is trying to inject the object from the Wizard controller back into the SimpleFormController.Code:2009-01-19 12:44:21,927 DEBUG [AddClaimLineController] - in processCancel 2009-01-19 12:44:21,943 DEBUG [EditClaimController] - onSubmitRender enter
My portlet config file:
The error I'm seeing is:Code:<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="viewClass"> <value>org.springframework.web.servlet.view.JstlView</value> </property> <property name="prefix"> <value>/WEB-INF/jsp/MakeClaim/</value> </property> <property name="suffix"> <value>.jsp</value> </property> </bean> <bean id="homePageController" class="test.onlineexpenses.controller.HomePageController"> <property name="expenseClaimService" ref="expenseClaimService"></property> </bean> <bean id="editClaimController" class="test.onlineexpenses.controller.EditClaimController"> <property name="expenseClaimService" ref="expenseClaimService"></property> <property name="commandName" value="claim" /> <property name="commandClass" value="test.onlineexpenses.domain.ExpenseClaim" /> <property name="formView" value="editClaim"></property> <property name="successView" value="editClaim"></property> </bean> <bean id="addClaimLineController" class="test.onlineexpenses.controller.AddClaimLineController"> <property name="expenseClaimService" ref="expenseClaimService"></property> <property name="commandName" value="claimLine" /> <property name="commandClass" value="test.onlineexpenses.domain.ClaimLine" /> </bean> <bean id="parameterMappingInterceptor" class="org.springframework.web.portlet.handler.ParameterMappingInterceptor" /> <bean id="portletModeParameterHandlerMapping" class="org.springframework.web.portlet.handler.PortletModeParameterHandlerMapping"> <property name="order" value="1" /> <property name="interceptors"> <list> <ref bean="parameterMappingInterceptor" /> </list> </property> <property name="portletModeParameterMap"> <map> <entry key="view"> <map> <entry key="homePage"> <ref bean="homePageController" /> </entry> <entry key="editClaim"> <ref bean="editClaimController" /> </entry> <entry key="addClaimLine"> <ref bean="addClaimLineController" /> </entry> </map> </entry> </map> </property> </bean> <bean id="portletModeHandlerMapping" class="org.springframework.web.portlet.handler.PortletModeHandlerMapping"> <property name="order" value="2" /> <property name="portletModeMap"> <map> <entry key="view"> <ref bean="homePageController" /> </entry> </map> </property> </bean> <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource"> <property name="basenames"> <list> <value>test.onlineexpenses.nl.MakeExpenseClaimPortletResource</value> </list> </property> </bean> </beans>
Code:[19/01/09 15:21:07:679 GMT] 0000003f JstlView 1 org.springframework.web.servlet.view.AbstractView exposeModelAsRequestAttributes Added model object 'org.springframework.validation.BindingResult.claimLine' of type [org.springframework.validation.BeanPropertyBindingResult] to request in view with name 'editClaim' [19/01/09 15:21:07:679 GMT] 0000003f JstlView 1 org.springframework.web.servlet.view.AbstractView exposeModelAsRequestAttributes Added model object 'claimLine' of type [test.onlineexpenses.domain.ClaimLine] to request in view with name 'editClaim' [19/01/09 15:21:07:679 GMT] 0000003f JstlView 1 org.springframework.web.servlet.view.InternalResourceView renderMergedOutputModel Including resource [/WEB-INF/jsp/MakeClaim/editClaim.jsp] in InternalResourceView 'editClaim' [19/01/09 15:21:07:679 GMT] 0000003f InputTag E org.springframework.web.servlet.tags.RequestContextAwareTag doStartTag Neither BindingResult nor plain target object for bean name 'claim' available as request attribute at org.springframework.web.servlet.support.BindStatus.<init>(BindStatus.java:141)
It seems to me that spring is using the command object from the AbstractWizardFormController inside the SimpleFormController, when it should be using a separate command object for the SimpleFormController.
Source code attached...
AddClaimLineController.txt
EditClaimController.txt
Anyone see what's going wrong?
![]()


Reply With Quote
