Ao usar o Initbinder para verificação, alguns dos dados enviados neste controlador precisam ser de natureza comercial, ou seja, ele será usado apenas em situações de verificação relativamente complexas. A verificação de formulário mais simples pode ser resolvida usando a verificação da anotação.
Para o uso da verificação da anotação, consulte: http://www.vevb.com/article/136448.htm
Uma coisa a observar aqui: Initbinder e Anotação só pode escolher uma das duas verificações. Se o Initbinder for usado, a verificação da anotação não poderá ser usada.
As configurações anteriores do web.xml e spring.xml não serão repetidas, consulte a configuração no link acima. Exatamente o mesmo.
Faça o upload diretamente do código:
1. Classe de entidade modelo do usuário5
pacote com.my.controller.bean; importar java.util.date; public class User5 {private longo id; nome de string privado; senha de sequência privada; data privada createTime; private Int Age; public Long getId () {return id; } public void setId (longo id) {this.id = id; } public string getName () {return name; } public void setName (nome da string) {this.name = name; } public string getPassword () {return senha; } public void setPassword (string senha) {this.password = senha; } public data getCreateTime () {return createTime; } public void setCreateTime (data createTime) {this.createTime = createTime; } public int getage () {Age de retorno; } public void setage (int Age) {this.age = Age; }}2. Adicione um novo validador:
pacote com.my.controller.validator; importar org.springframework.tereotype.component; importar org.springframework.validation.errors; importar org.springFramework.validation.validationutils; importação.springFrameRerRaRerC.Validation.portInTator; classe TestValidator implementa o validador {@Override public boolean supports (classe <?> paramclass) {return user5.class.equals (paramclass); } @Override public void validate (object obj, erros erros) {user5 user = (user5) obj; Validationutils.rejectifemptyorWhitespace (erros, "nome", "válido.name", null "," "); if (user.getage () <18) {errors.rejectValue ("idade", "válido.agemin", novo objeto [] {"idade", 18}, "idade não pode ser menor que {1} anos"); }}}@Component precisa ser adicionado aqui e DI é injetado
3. Controlador
pacote com.my.controller; importar java.util.LinkedHashMap; importar java.util.list; importar java.util.map; importar javax.validation.valid; importação org.springframework.beans.actory.annotation.autowired; importation.springfringfringfringfring.Beans.actory.annotation.autowired; org.springframework.tereotype.controller; importar org.springframework.validation.bindingResult; importar org.springframework.validation.fielderror; importação org.springframework.validation.validator; importação.springfamebweb.webwebwebwork.valindation.vringfamebweb.webwebwebwebwebwebring.Validation; org.springframework.web.bind.annotation.initbinder; importar org.springframework.web.bind.annotation.modelattribute; importação org. org.springframework.web.servlet.modlandView; importar com.my.controller.bean.user5; @controlador @requestmapping (value = "Binder") classe pública testinitBinderController {@autowired @qualiFier (value = "testValidator") Privateator; @Initbinder private void initbinder (WebDatabinder Binder) {Binder.SetValidator (Validator); } @RequestMapping (Method = requestMethod.get) public String Index () {return "/testinitbinder/index"; } @ReQuestMapping (value = "add", método = requestMethod.post) public ModelAndView Add (@modelattribute @Valid User5 User5, resultado BindingResult) {ModelAndView View = new ModelAndView ("TestinitBinder/Index"); view.adDoBject ("Usuário", usuário); if (result.haserrors ()) {list <fielderror> errs = resultado.getfielderrors (); Mapa <string, string> maperrors = new LinkedHashmap <string, string> (); para (fielderror err: errs) {system.out.println ("objectName:" + err.getObjectName () + "/tfieldName:" + err.getfield () + "/tfieldValue:" + err.getRejectValue () + "/tMessage:" + err.getDefaultMessage (); Maperrors.put (err.getfield (), err.getDefaultMessage ()); view.addObject ("erros", maperrors); } retornar visualização; } retornar visualização; }}Injete o validador no controlador.
De fato, usando o método initbinder, o método err.getDefaultMessage () no controlador Add não pode obter a mensagem correta correspondente. Você pode ver o resultado final da impressão de entrada.
4. Ver
<%@ página linguagem = "java" contentType = "text/html; charset = utf-8" pageEncoding = "utf-8"%> <%@ taglib uri = "http://java.sun.com/jsp/jstl/core" prefix = "c"%> taglib@ taglib uri = "http://java.sun.com/jsp/jstl/fmt" prefix = "fmt"%> <%@ taglib uri = "http://java.sun.com/jsp/jstl/functions" prefix = "fn" "%>@ taglib uri = "http://www.springframework.org/tags"%> <%@ taglib prefix = "form" uri = "http://www.springframework.org/tags/form/form/form/d.! "http://www.w3.org/tr/html4/loose.dtd"><html> <head><meta http-equiv =" content-type "content =" text/html; charset = utf-8 "> <title> init binder </title> </head> </html; action = "/testspringmvc1/binder/add" métod = "post" modelAttribute = "user5"> Nome do usuário: <input type = "text" id = "name" name = "name" value = "$ {user.name}"/> <br/> senha: <input type = "text" id = "" name = "" " type = "text" id = "idade" name = "idade" value = "$ {user.age}"/> <br/> <input type = "submit" value = "add"/> <hr/> erro: <br/> <form: erros path = "*"> </form: erros> </form: formulário </body> </html> ">Observe que você só pode usar <formulário: erros/> para obter informações de erro, e este <formulário: erros/> deve estar em <formulário: form/>.
5. Teste de resultados
Clique no botão Adicionar:
Impressão:
Você pode ver que as informações corretas do erro não podem ser obtidas aqui
De fato, quando os dados enviados em uma página de formulário muito complexos têm certa lógica de negócios, o initbinder não deve ser usado muito, porque muitas vezes podemos usar um mapa para inserir erros nele e lê -los na página. por exemplo:
Mapa <string, string> erros;
erros.add ("nome", "nome de usuário não pode estar vazio!");
:
:
Você só precisa usar:
<span style = "cor: vermelho;"> $ {errors.name} <pan>Apenas faça.
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.