2011-08-30 8 views
8

¿Cómo puedo configurar el Modelo/Clase de comando para enlazar a parámetros de solicitud específicos?Spring - ModeloAttribute y nombres de parámetro

Por ejemplo he siguiente método:

@RequestMappint("/success") 
ModelAndView success(@ModelAttribute SomeCommand command) { 
    // process 
} 

y comando:

class SomeCommand { 
    String title 
} 

que está funcionando bien para peticiones como /success?title=test, cuando los nombres de solicitud params igual al comando Propiedades nombres.

Pero lo que si necesito para mapear un nombre diferente? por ejemplo, si la solicitud como: /success?sk_title=test.

¿Cómo puedo asignar el parámetro de solicitud sk_title al campo title de mi comando?

Este comando tiene un montón de params, y utilizada por algunos métodos diferentes (que es una integración con otros sistemas de legado), así que conseguir todos estos parámetros como @RequestParam para cada método RequestMapped es un montón de trabajo y requiere demasiado trabajo de copiar/pegar, que trae muchos errores y códigos insoportables.

que tienen ningún control sobre parámetros de entrada nombres, que tienen nombres muy extraños como 'sk_yt_saf_amount', que es por lo que estoy tratando de obligar a que los nombres de propiedades más amigables.

PS estoy usando la palabra 'comando' allí, como datos de entrada, para distinguirlo del Modelo de ModelAndView concepción.

+0

usted no querría usar algo como @RequestParam ("sk_title") aquí en su ¿caso? – Infinity

+0

Tengo docenas de parámetros aquí, por lo que es mucho más fácil tener un contenedor para ellos. Y también se usa en algunos lugares pocos/URL con una lógica diferente, pero la misma estructura de datos –

+0

Si ese es el caso, en su solicitud de página Cómo hacer model.addAttribute ("miUsuario", nueva MyUser()), entonces en su @RequestMapping ("/ success") método puede agregar @ModelAttribute ("myuser"). En su formulario JSP, use spring form helper tag, . Eso ayudará a almacenar todos los parámetros presentados en su modelo. – Infinity

Respuesta

0
@RequestMapping("/success") 
    ModelAndView success(@RequestParam("sk_title") String title) { 
     SomeCommand command = new SomeCommand(); 
     command.setTitle(title); 
     model.addAttribute("title", command); 
     //rest of code here 
    } 

class SomeCommand { 
    String title 
    public void setTitle(String title){ 
    this.title = title; 
    } 
} 

Puede hacer esto más simple si tiene control sobre el atributo de nombre en la vista. Simplemente cambie los atributos de nombre para que coincidan con los campos de los objetos SomeCommand y Spring los autoenlazará. How to bind request params in spring 3.0? Aún necesitará agregar el comando al modelo y esta respuesta supone que está utilizando Spring 3 o superior. Supongo que la primavera también puede requerir getters y setters en los campos del objeto SomeCommand.

@RequestMapping 
public ModelAndView success(SomeCommand someCommand) { 
    model.addAttribute("someCommand", someCommand); 
} 
+1

lo siento, pero estoy preguntando acerca de cómo llenar las propiedades SomeCommand –

+0

código @splix actualizado ahora que entiendo mejor su pregunta. –

+0

Buena idea, pero ¿cómo puedo hacerlo sin mapeos de parámetros manuales? Algo más fácil y Spring-way. Una anotación tal vez? o la configuración de DataBinder? Se trata de muchas propiedades en Command, y se usa con pocas acciones; será mucho copiar/pegar allí. –

0

Si desea asignar una orden de parámetro sk_title al campo de título, a continuación, añadir la moda con el nombre sk_title:

public class SomeCommand { 
    private String title; 

    public String getTitle() { 
     return title; 
    } 

    public void setSk_title(String title) { 
     this.title = title; 
    } 
} 
Cuestiones relacionadas