Results 1 to 8 of 8

Thread: error while processing a form

  1. #1

    Default error while processing a form

    Hello everyone,

    I am trying to process a login form. This is my Controller:
    Code:
    @Controller
    @RequestMapping("/index.htm")
    @SessionAttributes("user")
    public class LoginController {
    
    	protected final Log logger = LogFactory.getLog(getClass());
    	 
    	@InitBinder
    	public void setAllowedFields(WebDataBinder binder) {
    		binder.setDisallowedFields(new String[] {"id"});
    	}
    	 
    	@RequestMapping(method = RequestMethod.GET)
    	public String setupForm(@RequestParam("user") User user, Model model) {	
    		model.addAttribute("user", user);		 
    		return "login";
    	}
    	    
    	@RequestMapping(method = RequestMethod.POST)
    	public String processSubmit(@ModelAttribute("user") User user, BindingResult result, SessionStatus status) {
    		new LoginValidator().validate(user, result);
    		if (result.hasErrors()) {
    			return "login";
    		} else {
    			status.setComplete();
    			return "index";
    		}
    	}
    
    }
    And this is my jsp with the form:
    HTML Code:
    <form:form modelAttribute="user">
    	<table>
    		<tr>
    			<td>User Name :</td>
    			<td><form:input path="user.login" /></td>
    			<td><form:errors path="user.login" cssClass="error" /></td>
    		</tr>
    		<tr>
    			<td>Password :</td>
    			<td><form:password path="user.password" /></td>
    			<td><form:errors path="user.password" cssClass="error" /></td>
    		</tr>
    	</table>
    </form:form>
    When i invoke login.jsp i am getting the following exception:
    Code:
    03-dic-2009 10:33:22 org.apache.catalina.core.StandardWrapperValve invoke
    GRAVE: Servlet.service() para servlet jsp lanzó excepción
    java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'user' available as request attribute
    	at org.springframework.web.servlet.support.BindStatus.<init>(BindStatus.java:141)
    	at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getBindStatus(AbstractDataBoundFormElementTag.java:175)
    	at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getPropertyPath(AbstractDataBoundFormElementTag.java:195)
    	at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getName(AbstractDataBoundFormElementTag.java:161)
    	at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.autogenerateId(AbstractDataBoundFormElementTag.java:148)
    	at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.resolveId(AbstractDataBoundFormElementTag.java:139)
    	at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.writeDefaultAttributes(AbstractDataBoundFormElementTag.java:123)
    	at org.springframework.web.servlet.tags.form.AbstractHtmlElementTag.writeDefaultAttributes(AbstractHtmlElementTag.java:409)
    	at org.springframework.web.servlet.tags.form.InputTag.writeTagContent(InputTag.java:140)
    	at org.springframework.web.servlet.tags.form.AbstractFormTag.doStartTagInternal(AbstractFormTag.java:91)
    	at org.springframework.web.servlet.tags.RequestContextAwareTag.doStartTag(RequestContextAwareTag.java:78)
    	at org.apache.jsp.login_jsp._jspx_meth_form_005finput_005f0(login_jsp.java:207)
    	at org.apache.jsp.login_jsp._jspService(login_jsp.java:104)
    	at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    	at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)
    	at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
    	at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
    	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
    	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
    	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
    	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
    	at java.lang.Thread.run(Unknown Source)
    I have been reading some posts about this exception, but no luck so far.

    Anyone knows what i am doing wrong?

    Thanks a lot in advance

  2. #2

    Default

    Probably you should invoke index.htm instead of login.jsp.

  3. #3

    Default

    thanks for the response.

    If i invoke index.htm i get a 404 error, thats weird...

    here is the part of my web.xml where i configure my dispatcher servlet:
    HTML Code:
    	<servlet>
    		<servlet-name>myapp</servlet-name>
    		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    		<load-on-startup>1</load-on-startup>
    	</servlet>
    
    	<servlet-mapping>
    		<servlet-name> myapp</servlet-name>
    		<url-pattern>*.htm</url-pattern>
    	</servlet-mapping>
    And myapp-servlet.xml:
    HTML Code:
    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:p="http://www.springframework.org/schema/p" 
        xmlns:context="http://www.springframework.org/schema/context"
        xsi:schemaLocation="
            http://www.springframework.org/schema/beans 
            http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
            http://www.springframework.org/schema/context 
            http://www.springframework.org/schema/context/spring-context-3.0.xsd">
    
        <context:component-scan base-package="com.myapp.web.servlet.mvc"/>
    
        <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/>
        
        <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property>
            <property name="prefix" value="/"></property>
            <property name="suffix" value=".jsp"></property>        
        </bean>
    
    </beans>
    It seems my configuration is ok, any idea?

  4. #4
    Join Date
    Feb 2006
    Location
    Nancy, France
    Posts
    145

    Default

    Where is your User object instanciated ?

    Your GET method should look like :

    Code:
    @RequestMapping(method = RequestMethod.GET)
    public String setupForm(Model model) {	
    	model.addAttribute("user", new User());		 
    	return "login";
    }
    Université Nancy 2
    France

  5. #5

    Default

    Thanks mlarchet, you were right.

    I rewrote my setupForm method as you pointed out and i am getting now the following exception:
    Code:
    org.springframework.beans.NotReadablePropertyException: Invalid property 'user' of bean class [com.myapp.model.user.User]: Bean property 'user' is not readable or has an invalid getter method: Does the return type of the getter match the parameter type of the setter?
    	at org.springframework.beans.BeanWrapperImpl.getPropertyValue(BeanWrapperImpl.java:654)
    	at org.springframework.beans.BeanWrapperImpl.getNestedBeanWrapper(BeanWrapperImpl.java:508)
    	at org.springframework.beans.BeanWrapperImpl.getBeanWrapperForPropertyPath(BeanWrapperImpl.java:485)
    	at org.springframework.beans.BeanWrapperImpl.getPropertyValue(BeanWrapperImpl.java:644)
    	at org.springframework.validation.AbstractPropertyBindingResult.getActualFieldValue(AbstractPropertyBindingResult.java:96)
    	at org.springframework.validation.AbstractBindingResult.getFieldValue(AbstractBindingResult.java:224)
    	at org.springframework.web.servlet.support.BindStatus.<init>(BindStatus.java:120)
    	at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getBindStatus(AbstractDataBoundFormElementTag.java:175)
    	at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getPropertyPath(AbstractDataBoundFormElementTag.java:195)
    	at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getName(AbstractDataBoundFormElementTag.java:161)
    	at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.autogenerateId(AbstractDataBoundFormElementTag.java:148)
    	at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.resolveId(AbstractDataBoundFormElementTag.java:139)
    	at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.writeDefaultAttributes(AbstractDataBoundFormElementTag.java:123)
    	at org.springframework.web.servlet.tags.form.AbstractHtmlElementTag.writeDefaultAttributes(AbstractHtmlElementTag.java:409)
    	at org.springframework.web.servlet.tags.form.InputTag.writeTagContent(InputTag.java:140)
    	at org.springframework.web.servlet.tags.form.AbstractFormTag.doStartTagInternal(AbstractFormTag.java:91)
    	at org.springframework.web.servlet.tags.RequestContextAwareTag.doStartTag(RequestContextAwareTag.java:78)
    I will try and see whats happening now. Thanks everyone for the help

  6. #6

    Default

    Thanks a lot everyone!

    I finally got it working, the last error was in my jsp form:
    HTML Code:
    <tr>
    			<td>User Name :</td>
    			<td><form:input path="user.login" /></td>
    			<td><form:errors path="user.login" cssClass="error" /></td>
    		</tr>
    I had to change it to:

    HTML Code:
    <tr>
    			<td>User Name :</td>
    			<td><form:input path="[COLOR="Red"]login[/COLOR]" /></td>
    			<td><form:errors path="[COLOR="red"]login[/COLOR]" cssClass="error" /></td>
    		</tr>

  7. #7
    Join Date
    Feb 2006
    Location
    Nancy, France
    Posts
    145

    Default

    I'm glad it helps you.

    Just an advice, from what I can see, you are keeping your JSP under the root folder of your application.
    You should put them in a WEB-INF subfolder, like WEB-INF/jsp.

    Code:
    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property>
            <property name="prefix" value="/WEB-INF/jsp/"></property>
            <property name="suffix" value=".jsp"></property>        
    </bean>
    You have to keep in mind that JSP are never directly reached from the user browser. Requests always go through DispatcherServlet (.htm extension in your case), then to your controller, and finally to your JSP after a forward from the ViewResolver.
    Université Nancy 2
    France

  8. #8

    Default

    Thanks a lot mlarchet,

    I will follow your advice.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •