O desenvolvimento da ação é concluído herdando a classe Actionupport. A classe ActionSupport não apenas implementa a interface de ação, mas também adiciona suporte à verificação e localização. Ações personalizadas no desenvolvimento real precisam herdar esta classe. Adicionar função de verificação do formulário ao login do usuário
O papel da classe Actionsupport:
O STRUTS2 não requer a classe de ação que projetamos para herdar a interface de classe base ou suportes, mas para facilitar a implementação de nossas próprias ações, herdaremos a compensação de compensar.xwork2.Actionsupport na maioria dos casos e substituirá a sequência pública executar () retenção do método de exceção nesta classe. Como existem muitas desculpas práticas nesta classe, muitos métodos padrão são fornecidos, incluindo métodos internacionais de informação, métodos padrão para processar solicitações de usuário etc., que podem simplificar bastante o desenvolvimento da ACion. No Struts2, a ação é geralmente usada diretamente para encapsular parâmetros de solicitação HTTP. Portanto, a classe de ação também deve incluir atributos correspondentes aos parâmetros de solicitação e fornecer métodos Getter e Setter correspondentes para os atributos.
Então, qual é a diferença entre a interface de ação e a classe Actionupport?
A interface de ação tem:
public static final string succcess = "sucessão"; public static final string None = "nenhum"; public static final string error = "error"; public static final string login = "login"; public string execute () lança exceção;
Você pode ver que existem cinco constantes estáticas e execute () com string de tipo de retorno
Com base na implementação da interface de ação, a classe Actionupport Tool Class também define um método validate (). Se o método for substituído, ele será executado antes do método execute (). Se a verificação falhar, ela será transferida para a entrada. O atributo de entrada deve ser configurado ao configurar a ação.
Além disso, o ActionSupport também fornece um método getText (chave da string) e realiza a internacionalização, que obtém informações de internacionalização de arquivos de recursos.
Dessa forma, ao personalizar a tag, você pode definir uma variável como um novo objeto ActionSupport para obter a internacionalização.
A classe Actionsupport possui (código -fonte):
public classe Ações APORPPORTMPPORMENTE AÇÃO, VALALATECIAL, VALALAÇÃO ADETIVO, LOGGER ESTÁTICO DE TEXTO, LOGGERFACTORY.GETLOGGER (ACTIONSupport.class); SetActionErrors (coleção <String> errorMessages) {validationAWare.setActionErrors (errorMessages);} public collection <string> getActionErrors () {return validationAware.getActionErrors ();} public void SetActionMessages (coleção <croleção>) {validationAction.SetActionMessages); validationAWare.getActionMessages ();}@deprecatedpublic collection <string> getErRormessages () {return getActionErrors ();}@deprecatedpublic map <string, list <)> geterrors () {return getfielderrors (); {validationAWare.setFielderrors (errorMap);} mapa público <string, list <string>> getfielderrors () {return validationAware.getfielderrors ();} public loce getLocale () {actionContext ctx = action cet.getContext (); se (ctx! {if (log.isdebugenabled ()) {log.debug ("contexto de ação não inicializado");} retornar null;}} public boolean hasKey (string key) {return getTextProvider (). atextName, string defaultValue) {return getTextProvider (). getText (atextName, defaultValue);} public string getText (string atextName, string defaultValue, string obj) {return getTextProvider (). getText (atextName, defadValue, obtJ); getTextProvider (). getText (ATEXTNAME, ARGS);} public String getText (chave de string, string [] args) {return getTextProvider (). getText (key, args);} public string getText (string atextName, stringValue. args);} public string getText (chave de string, string defaultValue, string [] args) {return getTextProvider (). getText (key, defaultValue, args);} public string getText (string key, stringVRoRe, list <?> args, valeestack stack) {returtTextTrovider,. String getText (chave da string, string defaultValue, string [] args, valuestack pilha) {return getTextProvider (). GetText (key, defaultValue, args, pilha);} public string getFormatted (string key, string expr) {map <string> conversionerrorrorrorrorrorrors = actionContet.Contet; (conversionerrorrors.containsKey (expr)) {string [] vals = (string []) conversionErrors.get (expr); retorna vals [0];} else {final valuestack valuestack = actionContext.getContext (). getValuestack; Arrays.asList (val));}} public ResourceBundLle getTexts () {return getTextProvider (). GetTexts ();} public ResourceBundle getTexts (string abundlename) {returt getTextProvider (). {validationAware.addActionError(anErrorMessage);}public void addActionMessage(String aMessage) {validationAware.addActionMessage(aMessage);}public void addFieldError(String fieldName, String errorMessage) {validationAware.addFieldError(fieldName, errorMessage);}public String input() throws Exception {return Input;} public string dodefault () lança exceção {return succcess;} public string execute () lança exceção {return succcess;} public boolean hasActionErrorRors () {return validationAware.hasactionErrors ();} public boolean hasationMessages () {return) {return) () {); validationAWare.haserrors ();} public boolean hasfielderrors () {return validationAare.hasfielderrors ();} public void clearfielderrors () {validationAlare.clearfielderrors ();} public voidrorrorrors () {validationAlare.cleareArrors ();} public void () {validationAare.clear.clearRors ();} public void » {validationAWare.clearMessages ();} public void clearerrorrors () {validationAWare.clearRorrors ();} public void clearRorRorRorRorSandMessages () {ValidationAWare.ClearErrrorSandMessages Clone ();} public void () {} @OverCoMPOPLON Clone (); Super.Clone ();} public void pausa (resultado da string) {} Private TextProvider getTextProvider () {if (textProvider == null) {textProviderFactory tpf = new textProviderFactory (); if (container! este);} retornar textProvider;}@injectpublic void setContainer (contêiner de contêiner) {this.container = contêiner;} Você pode ver que existem muitos métodos nele, mas obviamente vemos que existe um método que sabemos muito bem, valide () e verificação de dados. Através deste método, podemos solicitar ao fazer login, o nome de usuário e a senha estão vazios ou outros ...
Agora dê um exemplo simples: quando o nome de usuário e a senha estiverem vazios, dê ao cliente um prompt amigável.
A seguir, são apresentadas duas maneiras de explicar a função de verificação de dados do Struts 2.
1. Verificação do método de codificação
1) Ação deve ser herdada da ação
2) Escreva um método public void validatexxx () para que um método de processamento de solicitação seja verificado e execute a verificação de dados do formulário dentro do método.
3) Você também pode gravar o método público void valid () para todos os métodos de processamento de solicitação.
4) No método de verificação, você pode adicionar mensagem de erro de verificação de campo através do método addfielderror ().
5) Quando a verificação falhar, a estrutura do Struts pulará automaticamente para a página de resultado com entrada de nome. Na página de falha de verificação, você pode usar <s: fielderror/> para exibir mensagens de erro
6) Simples e flexível. Mas não é muito reutilizável
Reescrever o método validate
1. A ação que escrevemos geralmente herda e o ACTIONSUPPPORT, e o ActionSupport não apenas implementa a interface de ação, mas também implementa a interface validável, fornecendo função de verificação de dados. Defina um método de validação na interface validável, substitua o método, se ocorrer um erro no campo de entrada do formulário de verificação, adicione o erro ao campo Fielderror da classe Actionsupport e em seguida, produza -o através da expressão OGNL.
A seguir, a interface de verificação de login do usuário:
<body><%--Output verification information--%><%--If you want a single prompt<s:fielderror fieldName="uname"/>--%><%--<s:property value=""/>--%><div style="color:red"><s:fielderror/></div> <s:form name="form1" namespace="/" method="post" Action = "LoginValidateAction"> <S: div> Por favor, digite o nome de usuário: <S: textfield name = "user.uname"> </s: textfield> </s: div> <s: div> por favor, digite senha: <s: sigin name = "user.upwd">/s: senha </s: divid> <s: submit = "Login" Login "Login" -%> <S: Debug> </s: Debug> </body>
Depois que o usuário insere os dados, envie -os para LoginValidateAction:
classe pública LogInValidateAction estende a ação ACTIONSPORMENTO Ação {Usuário público do usuário; Public Map <String, Object> Map; // O método de verificação funcionará em todas as ações @Override public void valides () {if (user.getUname (). length () == 0) {addfielderror ("uname", "o nome do usuário não pode ser! if (user.getUpwd (). length () == 0) {addfielderror ("upwd", "a senha não pode estar vazia!");}} // métodos para lidar com negócios public string execute () lança exceção {System.out.println (user.getUname ()); if (user.getUname (). Equals ("admin") && user.getUpwd (). Equals ("admin")) {// Let struts2 injeção de mapa mapa.put ("uname ".getUname (); // se o logon entrada errorreTurn; // Isso deve ser input}}/*** @RETURN O usuário*/public user getUser () {return user;}/*** @param usuário o usuário para definir*/public void setUser (usuário do usuário) {this.User = user;} A classe LoginValidateAction acima substitui o método Validate, que será executado antes de executar o método de escutas. Se, após a execução do método, o FiledError da classe de ação contiver um erro de verificação de dados, a solicitação será encaminhada para a visualização lógica de entrada.
Struts.xml está configurado da seguinte forma:
<!-- Data verification--><action name="LoginValidateAction"><!-- When the result is "success", jump to the success.jsp page--><result name="success">success.jsp</result><!-- When the result is "error", jump to the fail.jsp page or is still login.jsp--><result name="input">LoginValidateAction.jsp</result><result name = "login"> fail.jsp </correr> <resultado name = "error"> fail.jsp </sicult> </ction>
Efeitos no cliente:
Mas você notou que, quando o erro é solicitado, não é o efeito que queremos.
Não é isso que queremos, então como podemos mudar isso? De fato, isso mostra principalmente o estilo temático Struts2,
Vamos dar uma olhada novamente:
Ele adiciona automaticamente estilos a nós. O STRUTS2 fornece três temas, Ajax, simples, xhtml. Padrões do tema XHTML. Obviamente, você pode escrever qualquer um de seus próprios temas, que chamamos de temas personalizados. Os problemas acima podem ser resolvidos definindo -os
Existem duas maneiras de resolvê -lo:
1. Método simples (também prático, para todas as tags STRUTS2), adicione a próxima linha de código no struts.xml.
<constante name = "struts.ui.theMe" value = "simples" />
Isso significa que todas as páginas usam o tema simples. No momento, a página que produz não adiciona nenhum código desnecessário, como a tabela TR TD, etc., e podemos editar o estilo da página como outras páginas de edição.
Vamos dar uma olhada no formato de prompt de erro
Podemos definir uma tag assim:
<S: Property Value = "Errors.Uname [0]"/>
Comente esta tag:
<div style = "cor: vermelho"> <s: fielderror/> </div>
Mas quando o definimos assim, esse efeito ocorrerá.
Esse efeito é um pouco parecido com o prompt quando geralmente inserimos erros e existem outros valores de atributo, por isso não precisamos listá -los um por um.
Estrutura de verificação com struts2
Verificação de configuração XML.
Executa antes de codificar.
1) Para que a classe de ação seja verificada, escreva um arquivo de regra de verificação nomeado: classe de ação nome-validação.xml sob o mesmo pacote.
2) Adicione regras de verificação ao arquivo da regra de verificação: Para nomes específicos de dispositivos de verificação, consulte a referência do STRUTS2 ou da API do Struts2.
a) Verificação de campo: Regras para verificar cada campo do tipo não custom na classe de ação.
<nome do campo = "Nome do campo a ser verificado"> <campo-validador tipo = "Verifique o nome da régua" curto-circuito = "se deve ser verificação de caminho curto (padrão é false)"> <param name = "Nome do parâmetro a ser usado pelo verificador"> Adicionar </param> <!
b) Verificação sem campo: use a expressão de OGNL para verificação combinatória para certos campos na classe de ação.
<validator type = "fieldExpression"> <param name = "fieldname"> pwd </param> <param name = "fieldname"> pwd2 </am>
c) Verificação do visitante: é usado principalmente para verificar o campo de tipo personalizado na classe de ação. (Para uso do modo acionado por modelo)
i) Use regras de verificação do visitante para campo de tipo personalizado no arquivo de regras de verificação da classe de ação.
<!-Use a verificação do visitante para campo personalizado-> <Nome do campo = "Usuário"> <Campo-Validador Tipo = "Requerido" Curto-Circuito = "True"> <ssage> Informações UsSage Necessário </mession> <!-Mensagem Prefix-> </field-validator> <Field-validator Tipo = "Visitor"> <!-Especificar como visitante verificação da verificação- O nome do contexto para esta verificação do visitante-> <param name = "AppendPrefix"> true </param> <!-se deve adicionar o prefixo da mensagem de falha de verificação-> <menstion> ussage </mession> <!-prefixo da mensagem-> </field-validator> </field>
ii) Escreva um arquivo de regra de verificação para o campo do visitante. O nome do arquivo é: Nome do tipo de campo do visitante [-Visitor Verificação do nome do contexto] -Validation.xml. Por exemplo: o nome do arquivo neste exemplo é UserContext-validação.xml
Nota: Este arquivo deve ser armazenado no pacote em que o tipo de campo do visitante está localizado.
iii) Adicione regras de verificação para o campo a ser verificado no arquivo da regra de verificação de campo do visitante.
Também podemos executar a verificação de dados adicionando um arquivo de configuração de verificação sem reescrever o método Validate. Este arquivo de configuração de verificação completa a verificação do campo de formulário usando o dispositivo de verificação existente no STRUTS2. Aqui, pegue o dispositivo de verificação necessária como exemplo. Este dispositivo de verificação é um dispositivo de verificação necessário que especifica que um determinado campo de formulário deve ser inserido.
A seguir, é a maneira de escrever a validação LoginValidateAction.xml deste arquivo de configuração de verificação:
<? xml versão = "1.0" coding = "utf-8"?> <! type = "requerir,"> <message> o nome de usuário não pode estar vazio </mession> </field-validator> </field> <names de campo = "upwd"> <field-validator type = "requerirstring"> <message> pode ser vazio </mession> </field-validator> <field-validator type = "stringlength"> <amankame> <ammeld> </field-validator> <field-validator = "stringlength"> <amankame> <anctom> name = "minlength"> 6 </am> <mession> O comprimento da passagem deve estar entre $ {minlength}-$ {maxleng} bits </mession> </field-validator> </field> </lidalators> Nota: Este arquivo de configuração de verificação deve cumprir as duas regras a seguir:
1. O formato do destino do arquivo deve ser o nome da classe de ação -Validation.xml. Por exemplo, neste exemplo, o nome do arquivo é: LoginValidateAction-validação.xml
2. O arquivo deve estar no mesmo caminho que o arquivo de classe da classe de ação. Neste exemplo, o arquivo está em
O código da classe LoginValidateAction é o mesmo:
classe pública LogInValidateAction estende a ação ACTIONSPORMENTO Ação {Usuário público do usuário; Public Map <String, Object> Map; // O método de verificação funcionará em todas as ações @Override public void valides () {if (user.getUname (). length () == 0) {addfielderror ("uname", "o nome do usuário não pode ser! if (user.getUpwd (). length () == 0) {addfielderror ("upwd", "a senha não pode estar vazia!");}} // métodos para lidar com negócios public string execute () lança exceção {System.out.println (user.getUname ()); if (user.getUname (). Equals ("admin") && user.getUpwd (). Equals ("admin")) {// Let struts2 injeção de mapa mapa.put ("uname ".getUname (); // se o logon entrada errorreTurn; // Isso deve ser input}}/*** @RETURN O usuário*/public user getUser () {return user;}/*** @param usuário o usuário para definir*/public void setUser (usuário do usuário) {this.User = user;}O exposto acima está a função de verificação de dados Struts 2 e a solução para o problema de verificação introduzido pelo editor. Espero que seja útil para todos. Se você tiver alguma dúvida, deixe -me uma mensagem e o editor responderá a todos a tempo. Muito obrigado pelo seu apoio ao site wulin.com!