[Spring MVC] probleme avec <spring:bind>
	
	
		Bonjour,
Je m'appuie sur le guide de Serge Tahe pour créer pas à pas une appli web en Spring MVC. Tout se passe bien jusqu'à l'utilisation de la balise <spring:bind> pouir valider un formulaire. Je pense àavoir tout fait comme M. Tahe, et pourtant...
J'ai une erreur 
	Citation:
	
		
		
			javax.servlet.ServletException: tried to access method org.springframework.validation.AbstractPropertyBindingResult.getActualFieldValue
			
		
	
 Voici une partie de mon createApplication-servlet.xml:
	Code:
	
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 
 | <beans>
	<!-- les mappings de l'application-->
	<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
		<property name="mappings">
			<props>
				<prop key="/createApplication.html">CreateApplicationController</prop>
			</props>
		</property>
	</bean>
	<!-- les contrôleurs de l'application-->
	<bean id="CreateApplicationController"
		class="controller.CreateApplicationController" autowire="byName">
		<property name="sessionForm">
			<value>true</value>
		</property>
		<property name="commandName">
			<value>createApplicationForm</value>
		</property>
		<property name="commandClass">
			<value>forms.CreateApplicationForm</value>
		</property>
		<property name="formView">
			<value>createApplication</value>
		</property>
		<property name="successView">
			<value>confirmCreateApplication</value>
		</property>
		<property name="validator">
			<ref bean="createApplicationFormValidator"/>
		</property>
	</bean>
	<!-- le validateur de formulaire -->
	<bean id="createApplicationFormValidator" 
		class="controller.validator.ValidateCreateApplicationForm"/> | 
 Mon controleur:
	Code:
	
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 
 | public class CreateApplicationController extends SimpleFormController {
 
	@Resource
	private ApplicationManager applicationManager;
 
	public ApplicationManager getApplicationManager() {
		return applicationManager;
	}
 
	public void setApplicationManager(ApplicationManager applicationManager) {
		this.applicationManager = applicationManager;
	}
 
	/**
         * Création d'une application 
         * @param request
         * @param response
         * @return
         */
	private ModelAndView create(HttpServletRequest request,
			HttpServletResponse response) {
		CreateApplicationForm createApplicationForm = (CreateApplicationForm) request.getSession().getAttribute(
		"createApplicationForm");
		Application app = new Application();
		app.setComment(createApplicationForm.getComment());
		app.setName(createApplicationForm.getName());
		app.setTrigram(createApplicationForm.getTrigram());
		applicationManager.add(app);
		// on rend un [ModelAndView]
		return new ModelAndView("confirmCreateApplication", null);
	}
 
	@Override
	protected Object formBackingObject(HttpServletRequest request) {
		// on récupère le formulaire dans la session s'il existe
		CreateApplicationForm createApplicationForm = (CreateApplicationForm) request.getSession().getAttribute(
				"createApplicationForm");
		if (createApplicationForm == null) {	
			createApplicationForm = new CreateApplicationForm();
		}
		// on rend le formulaire
		return createApplicationForm;
	}
 
	// traitement du POST
	@Override
	protected ModelAndView onSubmit(HttpServletRequest request,
			HttpServletResponse response, Object createApplicationForm,
			BindException errors) {
		// on met le formulaire dans la session
		request.getSession().setAttribute("createApplicationForm",
				createApplicationForm);
		// on rend un [ModelAndView]
		return create(request, response);
	}
 
} | 
 Mon objet formulaire:
	Code:
	
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 
 | public class CreateApplicationForm {
 
	/**
         * Le nom de l'application
         */
	private String name;
	/**
         * @return the name
         */
	public String getName() {
		return name;
	}
	/**
         * @param name the name to set
         */
	public void setName(String name) {
		this.name = name;
	} | 
 et enfin ma jsp à probleme:
	Code:
	
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 
 | <body>
createApplication
	<form method="post">
		<table>
			<tr>
				<spring:bind path="createApplicationForm.name">
					<td><input type="text" name="${status.expression}" value="${status.value}" /></td>
					<td>${status.errorMessage}</td>
				</spring:bind>
			</tr>
		</table>
	</form>
</body> | 
 C'est a priori la partie en gras qui pose probleme. Lorsque je veux accéder à mon formulaire, au lieu de m'afficher le champ d'input vide et le bouton submit, j'ai 
	Code:
	
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 
 | org.apache.jasper.JasperException: Exception in JSP: /views/createApplication.jsp:17
 
14: 	<form method="post">
15: 		<table>
16: 			<tr>
17: 				<spring:bind path="createApplicationForm.name">
18: 					
19: 					<td><input type="text" name="${status.expression}" value="${status.value}" /></td>
20: 					<td>${status.errorMessage}</td>
 
 
Stacktrace:
	org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:451)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:355)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:171)
	org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:251)
	org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1160)
	org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:901)
	org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:809)
	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:690)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
 
root cause
 
javax.servlet.ServletException: tried to access method org.springframework.validation.AbstractPropertyBindingResult.getActualFieldValue(Ljava/lang/String;)Ljava/lang/Object; from class org.springframework.web.servlet.support.BindStatus
	org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:841)
	org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:774)
	org.apache.jsp.views.createApplication_jsp._jspService(createApplication_jsp.java:135)
	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:331)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:171)
	org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:251)
	org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1160)
	org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:901)
	org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:809)
	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:690)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:803) | 
 Le seule différence que je vois avec le tutorial de Serge Tahe est que lui crée une instance de son formulaire dans son interface IMetier (l'équivalent de mon applicationManager) pour initialiser les champs. J'ai essayé mais ca n'a rien changé. Je ne comprends pas mon erreur :(