2011-09-20 19 views
5

Estoy usando la anotación @RequestParam para obtener los parámetros de solicitud, y usando la misma para insertar los valores en la base de datos. He configurado el controlador para volver a dirigirlo a la misma página que contiene los campos de texto para que el usuario ingrese los valores, que se están leyendo utilizando la anotación @RequestParam.Uso de @RequestParam arroja un error en Spring 3

Pero después de que entre los valores en los campos de texto y haga clic en enviar, se lanza este error de procesamiento

petición ha fallado; la excepción anidada es java.lang.IllegalArgumentException: el nombre para el tipo de argumento [java.lang.String] no está disponible, y la información del nombre del parámetro tampoco se encuentra en el archivo de la clase.

Soy un novato de Spring 3 y no puedo entender el error. ¿Alguien puede arrojar luz sobre lo mismo?

Gracias de antemano, Vivek

+0

¿Qué versión de Spring MVC? ¿Puedes mostrar la firma del método con anotaciones? – sinuhepop

+0

Estoy usando Spring MVC versión 3, y la firma del método es 'public void insertRecords (@ResearchParam String id, @RequestParam String name, @RequestParam String addr)' – Vivek

Respuesta

8

Con el fin de inyectar el valor de parámetro de la petición en su parámetro de método de control, ya sea uno de los siguientes debe ser satisfecho

  1. El nombre del parámetro de solicitud debe coincidir con el nombre del parámetro de método. p. Siguiendo inyectará el parámetro de solicitud llamado "StudentName" en el parámetro del método StudentName

    public String goToStep(@RequestParam String studentName)

  2. La solicitud de nombre de parámetro se debe especificar explícitamente si no coincide con el parámetro del método. A continuación se inyectará parámetro de la petición "nameOfStudent" en StudentName:

    public String goToStep(@RequestParam("nameOfStudent") String studentName)

por favor, puesto que su controlador de código de método si el problema persiste.

+0

Seguí la guía descrita y, en consecuencia, todos los nombres de parámetros son correctos Por favor, encuentre mencionado a continuación el código del método del controlador. 'insertRecords public void (id @RequestParam cadena, nombre @RequestParam cuerdas, cuerdas @RequestParam addr)' y la JSP correspondiente tiene el ID de atributos para cada uno de los campos de texto de acuerdo con el convenio de denominación del parámetro del método. – Vivek

+0

Compruebe si se puede acceder al parámetro de solicitud desde la capa de servlet.De esta manera: ' code' insertRecords public void (@RequestParam cadena de ID, nombre @RequestParam cuerdas, cuerdas @RequestParam addr, HttpServletRequest solicitud) { System.out.println (request.getParameter ("nombre")); // No usar en producción } 'código' Si esto imprime" nulo ", entonces el JSP no envía el parámetro y será útil publicar su código JSP relevante. Si imprime el valor que está esperando, entonces sabemos que el problema está con el controlador. –

3

Pedí la versión que está utilizando porque me encontré con un problema similar hace unos días. Estaba usando Spring 3.1.0.M2 y apareció la misma excepción cuando estaba usando @PathVariable en proxied @Controller.

Fue causado por resolved known bug. Solo tiene que cambiar a 3.0.6 o probar la versión nocturna 3.1.0.BUILD-SNAPSHOT. Por supuesto, la última opción no se recomienda para el entorno de producción.

+0

wwwoooowwwww .... voy a verificar esto y actualizar el espacio bak aquí ... gracias por la información ... :) – Vivek

+0

¡Muchas gracias! Estaba buscando todo este error oscuro y si no fuera por su publicación, pasaría muchas horas tratando de resolverlo :) – Leonti

Cuestiones relacionadas