I am trying to use MultiActionController first time. I had a user signup form where i have two buttons one is submit and one is cancel. onclick of submit my data get's inserted into database after validation checks and i want onclick of cancel my parent form i.e. login screen should apprear. If i use simple form controller i can't code cancel button so i try to change my sontroller to multication controller. My Controller is as follows:
my configuration file os:Code:package com.sachin.login; import javax.servlet.ServletException; import javax.servlet.http.*; import com.sachin.login.SignIn; import org.springframework.validation.BindException; //import org.springframework.web.servlet.mvc.SimpleFormController; import org.springframework.web.servlet.mvc.multiaction.MultiActionController; import org.springframework.web.servlet.ModelAndView; public class SignUpController extends MultiActionController{ private SignInDAO signInDao; //checks if a user with same id exists in database public void onBindAndValidate( HttpServletRequest request, Object command, BindException errors) throws Exception{ if (errors.hasErrors())return; SignIn formEmployee = (SignIn) command; SignIn dbEmployee = (SignIn) command; if ((dbEmployee=signInDao.getCredExist(formEmployee)) != null) errors.reject("error.login.exist.invalid"); } //should be called on click of button from view where button name is "Submit" public ModelAndView Submit(HttpServletRequest request, HttpServletResponse response,Object command) { SignIn data = (SignIn) command; signInDao.saveDataSheet(data); return new ModelAndView("successsignup"); } //should be called on click of button from view where button name is "Cancel" public ModelAndView Cancel(HttpServletRequest request, HttpServletResponse response) { return new ModelAndView("signIn"); } public SignInDAO getSignInDao() { return signInDao; } public void setSignInDao(SignInDAO signInDao) { this.signInDao = signInDao; } }
login-servlet.xml
Code:<beans> <bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <property name="mappings"> <props> <prop key="/signIn.htm">signInController</prop> <prop key="/signupform.htm">signUpController</prop> </props> </property> </bean> <!-- Validator --> <bean id="signUpValidator" class="com.sachin.login.SignUpValidator"/> <!-- Controller--> <bean id="signUpController" class="com.sachin.login.SignUpController"> <property name="sessionForm"><value>true</value></property> <property name="commandName"><value>SignIn</value></property> <property name="commandClass"><value>com.sachin.login.SignIn</value></property> <property name="validateOnBinding"><value>true</value></property> <property name="validator"><ref bean="signUpValidator"/></property> <property name="formView"><value>signupform</value></property> <property name="successView"><value>successsignup</value></property> <property name="bindOnNewForm"><value>false</value></property> <property name="signInDao"><ref bean="signInDao" /></property> <property name="methodNameResolver"><ref bean="methodNameResolver"/></property> </bean> <bean id="methodNameResolver" class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver"> <property name="paramName"> <value>action</value> </property> </bean>
now when i try to run this i got the following error :
if i use this in the controller then my application loads fine :Code:org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'signUpController' defined in ServletContext resource [/WEB-INF/login-servlet.xml]: Error setting property values; nested exception is org.springframework.beans.NotWritablePropertyException: Invalid property 'sessionForm' of bean class [com.sachin.login.SignUpController]: Bean property 'sessionForm' is not writable or has an invalid setter method. Does the parameter type of the setter match the return type of the getter? org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:870) org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:624) org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:411) org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:245) org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:141) org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:242) org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:156) org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:642) org.springframework.web.servlet.handler.AbstractUrlHandlerMapping.registerHandler(AbstractUrlHandlerMapping.java:194) org.springframework.web.servlet.handler.SimpleUrlHandlerMapping.initApplicationContext(SimpleUrlHandlerMapping.java:98) org.springframework.context.support.ApplicationObjectSupport.setApplicationContext(ApplicationObjectSupport.java:73) org.springframework.context.support.ApplicationContextAwareProcessor.postProcessBeforeInitialization(ApplicationContextAwareProcessor.java:86) org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:287) org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:920) org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:415) org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:245) org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:141) org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:242) org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:156) org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:304) org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:348) org.springframework.web.context.support.AbstractRefreshableWebApplicationContext.refresh(AbstractRefreshableWebApplicationContext.java:156) org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:308) org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:252) org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:221) org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:115) javax.servlet.GenericServlet.init(GenericServlet.java:211) org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148) org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869) org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664) org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527) org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80) org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684) java.lang.Thread.run(Unknown Source)
but now i have no way to inject validator or command class, hence error whhile submitting the form. Please suggest....Code:<bean id="signUpController" class="com.sachin.login.SignUpController"> <property name="methodNameResolver"><ref bean="methodNameResolver"/></property> </bean>


Reply With Quote
