martes, febrero 02, 2010

Neither BindingResult nor plain target object for bean name "command"...

Este error me sale frecuentemente y sobre todo después de muchas correcciones o adecuaciones a nuevos controllers en spring-mvc.

Siempre pierdo mucho tiempo tratando de encontrar el error, por que cuando veo el código tanto del jsp como del controllores todo parace perfecto, sin embargo el error persiste.

Cuando encuentro la solución siempre recuerdo que ya lo había hecho así antes y ahora quiero ponerlo aquí para que no se me olvide.

El error sale cuando inserto un nuevo objeto para persistir, no cuando edito uno ya existente y la respuesta está en la salida con succesView
return new ModelAndView(success);

Si successView no está definido me arroja el error, cuando se modifica el objeto successView es editado para mostrar nuevamente la forma de edición, sin embargo cuando el objeto es nuevo, pasa el parámetro de successView que está definido en el dispatcher. Entonces, si no hay successView definido en el dispatcher, me encuentro con ese error.

    <bean id="catalogoEstrategiasFormController" class="com.deuxbits.ssaspps.webapp.controller.CatalogoEstrategiasFormController">
        <!-- property name="validator" ref="beanValidator"/ -->
        <property name="successView" value="redirect:catalogoestrategias.html"/>
        <property name="catalogoEstrategiasManager" ref="catalogoEstrategiasManager"/>
        <property name="userManager" ref="userManager" />
        <property name="catalogoProgramasManager" ref="catalogoProgramasManager" />    
    </bean>





2 comentarios:

VoDoK (Lucas) dijo...

Buenas, podrías indicar si lo que estas utilizando es Spring 3 y en tal caso como se haría la equivalencia a la definicion de tu bean por anotaciones?

Estoy intentado mostrar una simple pagina de login y me da ese error con el nombre del bean cuyo value está especificado en el jsp, se que el error está en que no estoy especificando cual es el Objeto asociado al formulario en el controlador antes de modelar la vista pero no se como, ¿Alguna idea? Gracias

Dejo el codigo de mi jsp y el controlador (es solo un ejemplo)

@Controller
public class MainControl{


@RequestMapping("/inicio.htm")
public ModelAndView handleRequest(HttpServletRequest arg0,
HttpServletResponse arg1) throws Exception {
// TODO Auto-generated method stub
System.out.println("Paso por test");

return new ModelAndView("login/login");
}

}


---JSP---
El blog No me permite poner el codigo, pongo el error...

15-abr-2010 11:13:44 org.springframework.web.servlet.tags.RequestContextAwareTag doStartTag
GRAVE: Neither BindingResult nor plain target object for bean name 'usuario' available as request attribute
java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'usuario' available as request attribute
at org.springframework.web.servlet.support.BindStatus.(BindStatus.java:141)

juparave dijo...

Este es Spring 2.5, aún no uso el 3. En el handleRequest que pones no se genera el error que comento.

Si estás haciendo un login page seguramente estás usando un clase derivada de FormController, aunque no la veo heredada en tu declaración. Intenta poner el constructor el siguiente código.

public MainControl() {
setCommandClass(Usuario.class);
setCommandName("usuario");
}