English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Função do anotador @ModelAttribute no Java

问题描述:当我们使用表单传值得时候,如果定义了,name,address,age。等属性,那么通过表单传过去的值就只有这些属性,但是我们需要的name,pass,address,age等四个属性。那么在提交表单并赋值的时候就会出现,未得到的值为null的情况。如下图:3个属性,但是我们需要的name,pass,address,age等四个属性。那么在提交表单并赋值的时候就会出现,未得到的值为null的情况。如下图:

获取的pass为null

那么我们需要用@ModelAttribute注解来解决它:

实现代码如下:

 @ModelAttribute
 public void getUsers(@RequestParam(value="name",required=false) String name,Map<String, Object> map){
  if(name!=null){
   System.out.println("调用ModelAttribute");
   //模拟从数据库中获取的对象。
   User users = new User("cjh","123","[email protected]","China");
   System.out.println("从数据库中获取一个对象"+users);
   map.put("user",users);
  }
 }
 @RequestMapping(""}/getInfo")
 public String getServletAPI(User user){
  String viewName = "hello";
  System.out.println("Modificação:")+user);
  return viewName;
 }

O método anotado com @ModelAttribute, neste controlador, executará independentemente de qualquer outro método ser chamado.

O fluxo de execução do código acima é:

1.Primeiro, execute o método anotado com @ModelAttribute, consulte o objeto correspondente a ser modificado no banco de dados, coloque o valor no par de chave-valor do map, o key deve ser o mesmo que o nome do parâmetro do método que trata a solicitação, por exemplo: neste exemplo, o nome do parâmetro de entrada definido é user, então map.put(“user”, valor (objeto consultado no banco de dados)). Este Map deve ser definido no local do parâmetro do método (como no código acima).

2.O Spring MVC encontrará o objeto user no Map, atribuirá os parâmetros da solicitação de formulário ao objeto user e apenas substituirá os atributos definidos no formulário. Os que não estão definidos permanecerão como null, sem alteração. Portanto, o nome da chave definida no método anotado com @ModelAttribute deve coincidir com o nome do parâmetro do método do controlador (@RequestMapping() modificado pelo método). Caso contrário, não terá efeito.

3.O Spring MVC passa o objeto acima para os parâmetros do método alvo.

Atenção: No método anotado com @ModelAttribute, o nome da chave deve coincidir com o nome do parâmetro do tipo do método alvo ao ser inserido no map.

Efeito final:

Isso é tudo o que há no artigo. Esperamos que o conteúdo deste artigo ajude você a aprender ou trabalhar. Também esperamos que você apoie o tutorial Grito!

Declaração: o conteúdo deste artigo é extraído da internet, pertence ao respectivo proprietário. O conteúdo é contribuído e carregado voluntariamente pelos usuários da internet. Este site não possui direitos de propriedade, não foi editado manualmente e não assume responsabilidade por eventuais responsabilidades legais. Se você encontrar conteúdo suspeito de violação de direitos autorais, por favor, envie um e-mail para: notice#oldtoolbag.com (ao enviar e-mail, substitua # por @ para denunciar, e forneça provas relevantes. Apenas após a verificação, o site deletará o conteúdo suspeito de violação de direitos autorais.

Você também pode gostar