1. Prefácio
1.1. O que é verificação de entrada? Por que preciso entrar na verificação?
No artigo anterior, aprendemos sobre a conversão do tipo de dados. Mencionamos dois métodos de processamento de dados da camada de apresentação. Também mencionamos que os dados de entrada do usuário precisam ser conversões de tipo para obter os dados que desejamos. Então, como determinamos que os dados após a conversão do tipo são os dados que queremos? É um pouco atravessado aqui. Você pode pensar assim: um homem adulto tem 18 anos e deseja obter os dados de 18 agora, mas o usuário entra 32 e também é correto convertê -los através do tipo, mas os dados não são o que você deseja. O que devemos fazer neste momento? Portanto, a verificação de entrada é útil aqui.
A relação entre a conversão do tipo e a verificação de entrada é: a conversão do tipo é o pré -requisito para a verificação de entrada. Se as duas conversões de tipo estiverem erradas, não há necessidade de executar a verificação de entrada. Mas geralmente digite conversão e verificação de entrada são feitas ao mesmo tempo.
Existem dois tipos de verificação de entrada:
1. Verificação do cliente;
2. Verificação do lado do servidor. O que explicamos principalmente aqui é a verificação do lado do servidor (Rewrite ValidateXXX Method e XML Configuration File Verification)
1.2. Processo de verificação de reescrita Validatexxx Método
1. O conversor de tipo é responsável pela conversão do tipo dos parâmetros de solicitação da string e define esses valores aos valores da propriedade da ação.
2. Uma exceção pode ocorrer durante a execução da conversão do tipo. Se ocorrer uma exceção, as informações de exceção serão salvas automaticamente no ActionContext. O conversionError Interceptor é responsável por encapsulá -lo em um fielderror.
3. Ligue para o método validatexxx () através da reflexão, onde xxx é o nome do método correspondente à lógica de processamento que processará a solicitação do usuário.
4. Chame o método de ação validado de ação
5. Se as etapas acima não mostrarem um fielderror, o método de processamento para processar solicitações de usuário na ação será chamado. Se um fielderror aparecer, o sistema será transferido para a exibição especificada na visualização lógica de entrada.
2. Verificação de entrada
2.1. Existem duas maneiras de entrar na verificação aqui:
1. Reescreva o método Validate ou personalize o método validatexxx (onde xxx é o nome que você define, o método será executado primeiro e o método validate será executado)
2. Crie um novo XML para verificação
2.2. Reescrever o método validate
Na estrutura do MVC, é fornecida uma peça de verificação de dados padronizada. O STRUTS2 fornece um método validado aqui. Podemos reescrever o método Validate para executar a verificação de entrada. No entanto, há dois pontos a saber sobre a reescrita do método Validate: 1. O método Validate será executado antes do método de execução; 2. O método Validate executará regras de verificação para todas as ações. Para distinguir uma certa ação, podemos usar o método Validatexxx.
Nota: Os exemplos a seguir são exemplos de conversão de tipo local e validação de entrada.
Exemplo de verificação de registro simples:
Crie um novo usuário da classe de entidade:
Usuário
Crie uma nova visualização: Register.jsp
<%@ página de página = "java" contentType = "text/html; charset = utf-8" pageEncoding = "utf-8"%> <%@ taglib uri = "/struts-tags" prefix = "s"%> <! "http://www.w3.org/tr/html4/loose.dtd"><html> <head><meta http-equiv =" content-type "content =" text/html; charset = utf-8 "> <title> Usuário. <formulário action = "registr_test"> user: <input type = "text" name = "user"> <br/> senha: <input type = "senha" name = "user"> <br/> senha: <input type = "senha" name = "user"> <br/> <input Type = "subit" = "
Crie uma nova classe RegisterAction para herdar ações
pacote com.validatexxx; importar com.opensymphony.xwork2.actionsupport; // rewrite valides () e validatexxx métodos especificados para verificação/ * * * em struts.xml, o método ValidateTest () será chamado primeiro e, em seguida, o método de teste é chamado após a chamada de validar o método * */publicar o registro (publicar registrar (), o método do usuário do uso do usuário e o método do usuário */public ClassTeTActActActActAct () e o método do usuário de uso do usuário do valor do uso do usuário */public */public ClassTeTent (); usuário público getUser () {return user; } public void SetUser (usuário do usuário) {this.User = user; } // 2 @Override public void validate () {System.out.println ("Rewrite Validate Method"); if (null == user.getpassword () || "" .equals (user.getpassword ()) || null == user.getRespassword () || "" .equals (user.getrepassword ()))) {this.addfielderror ("Repassword", "o repassado deve ser a mesma senha"); retornar; } if (! user.getpassword (). Equals (user.getRespassword ())) {// Quando os dados existam no Fielderror, o servidor pulará automaticamente para a visualização lógica da entrada. }} // 1 public void validateTest () {System.out.println ("Método de verificação personalizada: validatetest"); } // 3 public String test () {System.out.println ("Test: Method"); sucesso de sucesso; }}Nota: A propriedade aqui é usuário, portanto, o nome do parâmetro da página JSP deve ser escrito como o nome do usuário da instância e, em seguida, você também precisa criar um conversor de tipo para retornar uma classe cheia de dados
Crie um novo struts.xml e armazene-o em web-inf/classes/struts.xml
Nota: O método aqui deve ser definido por você após o seu método valudatexxx (). Aqui está o teste. Se você usar *, o STRESTS2 também deve configurar o strito-metod-invocation = "false". Dizem que, como a versão é muito alta, sua segurança foi aumentada e tudo deve ser adicionado para usar *
Crie uma nova classe UserTyPeconverter para herdar StrutStyPeConverter (Crie um conversor de tipo)
pacote com.validatexxx; importar java.util.map; importar org.apache.struts2.util.strutStyPeConverter; // classe de tipo de conversão public classe userTypeConverter estende strutstyPyPonVerter {@Override public ObjectFromString (map0, string. [] arg. Tipo de conversão! "); Usuário do usuário = novo usuário (); user.setUserName (arg1 [0]); user.setPassword (arg1 [1]); user.setRepassword (arg1 [2]); devolver usuário; } @Override public string convertToString (mapa arg0, objeto arg1) {user u = (user) arg1; retornar u.getUsername ()+"!"; }}NOTA: Depois que o conversor desse tipo for criado, você precisa criar um novo RegisterAction-Conversão.properties e colocá-lo no mesmo diretório.
O conteúdo deste arquivo é:
O primeiro é o nome da propriedade que você está no RegisterAction, seguido pelo caminho específico para o conversor de tipos.
Crie uma nova visualização de sucesso: succcess.jsp
succcess.jsp
Crie uma nova visualização de erro: input.jsp
input.jsp
O efeito da execução bem -sucedida do código é o seguinte:
Página Register.jsp
A página que saltou com sucesso é: succcess.jsp
Os resultados dos testes do console são:
Os dados saltam para o userTyPeconverter para conversão de tipo, depois salta para o RegisterAction, execute o método validateTest (), valida e retorna o sucesso e, em seguida, execute a visualização do resultado.
Vejamos a ordem em que o código falha:
Página Register.jsp
página input.jsp
Efeito do teste do console:
No método Validate, o código do autor é: this.addfielderror (). Como mencionado anteriormente, se um erro for adicionado, o servidor nos ajudará automaticamente a pular para a interface errada. Ele retornará a entrada e a entrada será configurada no Struts.xml e retornará à interface input.jsp.
2.3. Crie novo XML para verificação de entrada
Crie uma nova interface de visualização: test.jsp
<%@ página de página = "java" contentType = "text/html; charset = utf-8" pageEncoding = "utf-8"%> <%@ taglib uri = "/struts-tags" prefix = "s"%> <! "http://www.w3.org/tr/html4/loose.dtd"><html> <head><meta http-equiv =" content-type "content =" text/html; charset = utf-8 "> <title> use xml verificação <//title> </title> </title; Method = "Post"> <S: Textfield name = "name" etc. = "name" size = "20" /> <s: textfield name = "idade" label = "idade" size = "20" /> <s: submit name = "submit" etc.
Crie uma nova aula de funcionários para herdar o ACTIONSupport
Esta classe usa o método de validação de substituição e a configuração XML, podemos escolher um deles para verificação
pacote com.validatexxx; import com.opensymphony.xwork2.actionsupport; // use o método validate () para verificar, isso é verificação do lado do servidor! A classe pública Employee estende o ACOCHOPPORT {private String Name; private Int Age; public String getName () {Return Name; } public void setName (nome da string) {this.name = name; } public int getage () {Age de retorno; } public void setage (int Age) {this.age = Age; } // A segunda etapa executa este método public string Execute () {System.out.println ("Execute:"+this.age); sucesso de sucesso; }/* Verificação usando o lado do servidor: reescreva o método validate (); // A primeira etapa é executar o método // reescrever o método Validate tem uma falha: toda vez que você usa o método Validate para verificar, causando grande desperdício de recursos. public void validate () {System.out.println ("validate"); if (name == null || name.trim (). Equals ("" ")) {// Ao adicionar dados a esse método, o servidor retornará a entrada e depois irá para a página input.jsp. addfielderror ("nome", "o nome é necessário"); } if (idade <28 || idade> 65) {addfielderror ("idade", "a idade deve estar entre 28 e 65"); }}*/}Configure no struts.xml:
O sucesso.jsp e input.jsp aqui ainda usam o acima.
Depois disso, precisamos criar um novo funcionário-validação.xml e colocar o caminho no mesmo diretório que o funcionário. Nota: -Validation.xml é fixo e inalterado.
O conteúdo é:
<? xml versão = "1.0" coding = "utf-8"?> <! <mession> O nome é necessário. </message> </field-validator> </field> <campo name = "idade"> <field-validador type = "int"> <param name = "min"> 29 </am> <param name = "max"> 64 </param> <mession> idade deve estar entre 28 e 65 </session> </field-validador> </field>
Ponto da chave: o limite do DTD deste arquivo deve ser, caso contrário, o erro de retorno:
Erro DefaultDispatcherErrorHandler Exceção ocorreu durante a solicitação de processamento: [Conexão cronometrada: Connect - [Localização desconhecida], NULL]
Em seguida, usamos http: // localhost: 8080/learStruts2/validatejsp/test.jsp para acesso.
Testado com sucesso:
Interface test.jsp:
succcess.jsp
Exemplo de falha no teste:
interface input.jsp:
O exemplo da ilustração está correto.
De fato, existem vários validadores internos no Struts2: validador necessário, validador de string necessário, validador inteiro, validador de data, validador de expressão, validador de comprimento do caractere, validador de expressão regular etc. Se necessário, o autor explicará este por um.
O acima exposto é uma explicação detalhada do tutorial de verificação de entrada de dados STRUTS2 introduzido pelo editor. Espero que seja útil para você. Se você tiver alguma dúvida, deixe -me uma mensagem e o editor responderá a você a tempo. Muito obrigado pelo seu apoio ao site wulin.com!