[Logo] Mentawai Forum - Mentawai Web Framework
  [Search] Search   [Recent Topics] Recent Topics   [Members]  Member Listing   [Groups] Back to home page 
[Register] Register / 
[Login] Login 

Forum Read-Only! Check the new site and forum here!

Ajuda com validationfilter  XML
Forum Index -> Comentários Gerais
Author Message
gapler



Joined: 08/01/2008 12:20:49
Messages: 65
Offline

Pessoal:

Estou seguindo 'mais ou menos' o exemplo do site, quanto ao uso do ValidationFilter.

Meu applicationmanager está assim:

Code:
         ac = new ActionConfig("/LoginEnterprise", LoginEnterprise.class);
         ac.addConsequence(LoginEnterprise.SUCCESS, new Forward("/loginUser.jsp"));
         ac.addConsequence(LoginEnterprise.ERROR, new Forward("/loginEnterprise.jsp"));
         addActionConfig(ac);        
         ac.addFilter(new NSCValidator());
 


Minha classe de Validação está assim:

Code:
 public class NSCValidator extends ValidationFilter {
 
     private static final String FIELD_REQUIRED_ERROR = "required"; // to illustrate that this can be a string too   
     private static final int INVALID_PASSWORD_LENGTH = 1;
     private static final int PASSWORD_DOES_NOT_MATCH = 2;
 
     public void prepareValidator(Validator val, Action action, String innerAction) {   
         
         val.add("username", new RequiredFieldRule(), FIELD_REQUIRED_ERROR);   
 
         val.add("password", new RequiredFieldRule(), FIELD_REQUIRED_ERROR);   
         val.add("password", new StringRule(1, 6), INVALID_PASSWORD_LENGTH);   
         val.add("password", new EqualRule("password", "passconf"), PASSWORD_DOES_NOT_MATCH);   
 
         val.add("passconf", new RequiredFieldRule(), FIELD_REQUIRED_ERROR);   
     }
 
     public void initValidator() {
         throw new UnsupportedOperationException("Not supported yet.");
     }
 
 }
 


Criei em web/validation o arquivo NSCValidator_pt_BR.i18n, com o conteúdo:

Code:
 required = Campo requerido - não pode ser deixado em branco!
 1 = Sua senha tem que possuir no mínimo %min% e no máximo %max% caracteres!
 2 = A senha não confere!
 


Só que, ao executar o sistema, aparece a seguinte mensagem de erro:

Code:
 type Exception report
 
 message 
 
 description The server encountered an internal error () that prevented it from fulfilling this request.
 
 exception 
 
 javax.servlet.ServletException: Error loading application manager: ApplicationManager
 	org.mentawai.core.Controller.initApplicationManager(Controller.java:148)
 	org.mentawai.core.Controller.init(Controller.java:86)
 	org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
 	org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)
 	org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
 	org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584)
 	org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
 	java.lang.Thread.run(Thread.java:619)
 
 


Executando no modo debug, vi que ele lança esse problema quando ele acessa o primeiro "val.add" do método prepareValidator da minha classe NSCValidator.

Vi também que ele executa o método initValidator(), só que o texto que está no site não explica qual a função desse método. Qual seria essa função, já que ele está lançando uma "throw new UnsupportedOperationException("Not supported yet.")"?

[]s
Rafael
[WWW] [MSN]
saoj



Joined: 01/07/2005 09:59:17
Messages: 2846
Location: Rio de Janeiro, RJ
Offline

A exception sempre vai te dizer exatamente qual é o problema:

javax.servlet.ServletException: Error loading application manager: ApplicationManager

Não tem nada haver com validação. Tem haver com o ApplicationManager. Por algum motivo, o controlador não conseguiu carregar ele.

Onde ele está (em que pacote) e como vc configurou o web.xml para carregar ele?

E o initValidator não é para ser implementado, apenas o prepareValidator. Acho que o initValidator nem existe mais... Onde vc viu ele? Me diz pois a documentação pode estar desatualizada.


Sergio Oliveira

gapler



Joined: 08/01/2008 12:20:49
Messages: 65
Offline

saoj wrote:
A exception sempre vai te dizer exatamente qual é o problema:

javax.servlet.ServletException: Error loading application manager: ApplicationManager

Não tem nada haver com validação. Tem haver com o ApplicationManager. Por algum motivo, o controlador não conseguiu carregar ele.

Onde ele está (em que pacote) e como vc configurou o web.xml para carregar ele?
 


Pois é... mas o erro só apareceu depois que eu implementei o ValidationFilter...

O ApplicationManager está no pacote default, e no web.xml está:

Code:
 <web-app>
     <display-name>Hello Mentawai</display-name>
     <description>
         Hello World from the Mentawai Web Framework
     </description>
 
     <servlet>
         <servlet-name>Controller</servlet-name>
         <servlet-class>org.mentawai.core.Controller</servlet-class>
         <load-on-startup>1</load-on-startup>		
     </servlet>
     
     <servlet-mapping>
         <servlet-name>Controller</servlet-name>
         <url-pattern>*.mtw</url-pattern>
     </servlet-mapping>
 
     <welcome-file-list>
         <welcome-file>index.jsp</welcome-file>
     </welcome-file-list>
 
     
     <filter>
         <filter-name>DebugFilter</filter-name>
         <filter-class>
             org.mentawai.util.DebugServletFilter
         </filter-class>
     </filter>
     
     <filter-mapping>
         <filter-name>DebugFilter</filter-name>
         <url-pattern>*.jsp</url-pattern>
         <dispatcher>REQUEST</dispatcher> 
         <dispatcher>FORWARD</dispatcher>    
         <dispatcher>INCLUDE</dispatcher>    
         <dispatcher>ERROR</dispatcher>    
     </filter-mapping>
 
     <taglib>
         <taglib-uri>Mentawai</taglib-uri>
         <taglib-location>/WEB-INF/lib/mentawai.jar</taglib-location>
     </taglib>
     
 </web-app>
 


saoj wrote:

E o initValidator não é para ser implementado, apenas o prepareValidator. Acho que o initValidator nem existe mais... Onde vc viu ele? Me diz pois a documentação pode estar desatualizada.
 


O netbeans me deu um warning para implementar todos os métodos abstratos do org.mentawai.filter.ValidationFilter... eu só segui a recomendação...

Esse throw é típico do netbeans quando ele ainda não sabe o que fazer:

Code:
     public void initValidator() {
         throw new UnsupportedOperationException("Not supported yet.");
     }
 


Aí vai o loadActions do ApplicationManager:

Code:
     public void loadActions() {
         
         addGlobalFilter(new AuthenticationFilter());   
         addGlobalConsequence(AuthenticationFilter.LOGIN, new Redirect("/loginEnterprise.jsp"));   
 
         
         ac = new ActionConfig("/LoginEnterprise", LoginEnterprise.class);
         ac.addConsequence(LoginEnterprise.SUCCESS, new Forward("/loginUser.jsp"));
         ac.addConsequence(LoginEnterprise.ERROR, new Forward("/loginEnterprise.jsp"));
         addActionConfig(ac);        
         ac.addFilter(new NSCValidator());   
         
         //nesse ponto, irá checar se, ao vir de /LoginEnterprise, é por um LOGIN ou por um REDIRECT (no caso do cliente tentar
         //acessar diretamente www.gessind.com.br/cadastroAssociado.mtw nesse caso, ele será levado para /LoginEnterprise. 
         //Porém, ao retornar, ele não precisa ir para loginUser, e sim para a própria página que ele tentou acessar (no caso, www.gessind.com.br/cadastroAssociado.mtw)
         ac.addFilter(new RedirectAfterLoginFilter());   
         ac.addConsequence(RedirectAfterLoginFilter.REDIR, new Redirect());
 
         ac = new ActionConfig("/LoginUser", LoginUser.class);
         ac.addConsequence(LoginEnterprise.SUCCESS, new Forward("/principal.jsp"));
         ac.addConsequence(LoginEnterprise.ERROR, new Forward("/error.jsp"));
         addActionConfig(ac);
 
         ac = new ActionConfig("/Logout", Logout.class);   
         ac.addConsequence(Logout.SUCCESS, new Redirect("/loginEnterprise.jsp"));   
         addActionConfig(ac);   
 
     }
 


[]s
Rafael



[WWW] [MSN]
saoj



Joined: 01/07/2005 09:59:17
Messages: 2846
Location: Rio de Janeiro, RJ
Offline


Vc está usando a última versão do Mentawai?

Primeira coisa que vc tem que fazer é entender porque não está dando para carregar o ApplicationManager.

Tem certeza que ele está no package default?

Vc colocou algum package nele? Compilou ele?


Sergio Oliveira

saoj



Joined: 01/07/2005 09:59:17
Messages: 2846
Location: Rio de Janeiro, RJ
Offline


Acabei de checar aqui e a última versão do Mentawai não possui o initValidator. Vc deve estar usando uma versão antiga...

Recomendo que vc pega o último jar aqui:

http://www.mentaframework.org/beta/mentawai.jar

Sergio Oliveira

gapler



Joined: 08/01/2008 12:20:49
Messages: 65
Offline

saoj wrote:

Vc deve estar usando uma versão antiga...
 


Pior que eu estava usando a versão 1.12, baixado recente do site. Mas, agora, usando o jar que vc enviou, parece que funcionou.

Entretanto, está dando um warning no netbeans, cuja imagem está no anexo...

[]s
Rafael
 Filename imagem.JPG [Disk] Download
 Description
 Filesize 32 Kbytes
 Downloaded:  466 time(s)

[WWW] [MSN]
saoj



Joined: 01/07/2005 09:59:17
Messages: 2846
Location: Rio de Janeiro, RJ
Offline

Isso é algum detalhe de Generics + Netbeans. Não entendi o porque do Warning...

Não tem nada haver com o Mentawai...

Sergio Oliveira

gapler



Joined: 08/01/2008 12:20:49
Messages: 65
Offline

saoj wrote:
Isso é algum detalhe de Generics + Netbeans. Não entendi o porque do Warning...

Não tem nada haver com o Mentawai... 


Correto...

Bom, agora está funcionando quase como devia.

No JSP, tenho:

Code:
             <form action="LoginEnterprise.mtw" method="post">
                     Código da Empresa: 
                     <mtw:input type="text" name="codigoEnt" size="6" maxlength="6" klass="text"/>
                         <mtw:hasError>
                                 <mtw:error/>                                
                         </mtw:hasError>
                         <mtw:hasError>
                                 <mtw:error field="codigoEnt"/>
                         </mtw:hasError>
 
                 <input name="submit" type="submit" value="Logar" class="submit"/>                
             </form>
 


no Validator, está:

Code:
 public class NSCValidator extends ValidationFilter  {
 
     private static final String FIELD_REQUIRED_ERROR = "required"; // to illustrate that this can be a string too   
     private static final int INVALID_PASSWORD_LENGTH = 1;
     private static final int PASSWORD_DOES_NOT_MATCH = 2;
 
     public void prepareValidator(Validator val, Action action, String innerAction) {   
         
         val.add("codigoEnt", new RequiredFieldRule(), FIELD_REQUIRED_ERROR);   
         
         val.add("codigoFunc", new RequiredFieldRule(), FIELD_REQUIRED_ERROR);   
         
     }
 
 }
 


Os demais, estão como os códigos acima.

Quando eu deixo o campo em branco, e clico no botão "logar", a mensagem que aparece é a definida no arquivo /validation/NSCValidator_pt_BR.i18n, conforme orientações do texto.

Porém, quando eu clico no botão "logar", com um campo preenchido de forma inadequada, ou ainda preenchido com o código que eu desejo, o sistema volta à tela inicial, novamente, sem executar a próxima página definida no action (seja ERROR ou SUCCESS)...

[]s
Rafael

[WWW] [MSN]
saoj



Joined: 01/07/2005 09:59:17
Messages: 2846
Location: Rio de Janeiro, RJ
Offline


Vc está fazendo alguma coisa errada aí... Dá uma olhada com calma aqui:

http://recipes.mentaframework.org/posts/list/26.page

E brinca... É brincando (debugando) que se aprende...

Sergio Oliveira

gapler



Joined: 08/01/2008 12:20:49
Messages: 65
Offline

Fiz uma mudança com base no que você sugeriu, e ele começou a funcionar. Ficou com o seguinte código no validador:

Code:
 public class NSCValidator extends ValidationFilter  {
 
     private static final String FIELD_REQUIRED_ERROR = "required"; // to illustrate that this can be a string too   
     private static final int INVALID_PASSWORD_LENGTH = 1;
     private static final int PASSWORD_DOES_NOT_MATCH = 2;
 
     public void prepareValidator(Validator val, Action action, String innerAction) {   
 
             Rule required = RequiredFieldRule.getInstance();   
             val.add("codigoEnt", required, FIELD_REQUIRED_ERROR);
     }
 }


Porém, agora, quando executa, ele dá a seguinte mensagem:

Code:
 type Exception report
 
 message 
 
 description The server encountered an internal error () that prevented it from fulfilling this request.
 
 exception 
 
 javax.servlet.ServletException: Servlet.init() for servlet Controller threw exception
 	org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
 	org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)
 	org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
 	org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584)
 	org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
 	java.lang.Thread.run(Thread.java:619)
 
 
 root cause 
 
 java.lang.AbstractMethodError: org.mentawai.filter.ValidationFilter.initValidator()V
 	org.mentawai.filter.ValidationFilter.<init>(ValidationFilter.java:53)
 	validador.NSCValidator.<init>(NSCValidator.java:26)
 	ApplicationManager.loadActions(ApplicationManager.java:32)
 	org.mentawai.core.Controller.initApplicationManager(Controller.java:140)
 	org.mentawai.core.Controller.init(Controller.java:86)
 	org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
 	org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)
 	org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
 	org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584)
 	org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
 	java.lang.Thread.run(Thread.java:619)
 
 



Repare que na root cause ele acusa:

org.mentawai.filter.ValidationFilter.initValidator()V
org.mentawai.filter.ValidationFilter.<init>(ValidationFilter.java:53)

que é um método initValidator()V -> e esse V no final é um tanto estranho, não acha? Seria ele a causa do problema?

[]s
Rafael
[WWW] [MSN]
saoj



Joined: 01/07/2005 09:59:17
Messages: 2846
Location: Rio de Janeiro, RJ
Offline


O initValidator não exxiste mais...

Vc está com uma confusão braba aí em relação ao mentawai.jar que vc está usando para compilar e o mentawai.jar que vc está usando para executar.

Faça uma limpeza geral aí, pois quando isso acontece é dor de cabeça na certa...

Sergio Oliveira

edyvr



Joined: 09/12/2009 15:47:11
Messages: 10
Offline

Também estou tendo o mesmo problema com o initValidator e eu baixei o plugin para NetBeans. Acho que é ele que não aestá atualizado.

Neste caso, o que eu devo fazer?
saoj



Joined: 01/07/2005 09:59:17
Messages: 2846
Location: Rio de Janeiro, RJ
Offline

Esquece o plugin do netbeans. Isso está descontinuado. Veja o passo a passo da applicacao de referencia.

Sergio Oliveira

 
Forum Index -> Comentários Gerais
Go to:   
Powered by JForum 2.1.6 © JForum Team