2011-08-22 9 views
6

La implementación de validación de beans JSR303 Hibernate-Validator (4.1.0) proporciona la anotación org.hibernate.validator.constraints.ScriptAssert.Validación @ScriptAssert con acceso a métodos estáticos

Lo hago funcionar para la invocación de métodos no estáticos.

@ScriptAssert(script="_this.isComplexSubValid(_this.attributeA,_this.attributeB)", 
       lang = "javascript") 

... 
public boolean isComplexSubValid(Object a, Object b)... 

pero ahora quiero exteriorizar el isComplexSubValid como un método estático para reutilizarla en diferentes clases. Pero no consigo la invocación estática trabajando con el validador de JavaScript.

@ScriptAssert(script="ComplexValidation.isComplexSubValid(_this.attributeA,_this.attributeB)", 
       lang = "javascript") 

public static boolean isComplexSubValid(Object a, Object b)... 

tiros:

excepción inesperada durante isValid llamada: org.hibernate.validator.engine.ConstraintTree.validateSingleConstraint (ConstraintTree.java:156) org.hibernate.validator.engine.ConstraintTree .validateConstraints (ConstraintTree.java:140) org.hibernate.validator.metadata.MetaConstraint.validateConstraint (MetaConstraint.java:121) org.hibernate.validator.engine.ValidatorImpl.validateConstraint (ValidatorImpl.java:327) org. hibernate.validator.engine.Val idatorImpl.validateConstraintsForRedefinedDefaultGroup (ValidatorImpl.java:273) org.hibernate.validator.engine.ValidatorImpl.validateConstraintsForCurrentGroup (ValidatorImpl.java:256) org.hibernate.validator.engine.ValidatorImpl.validateInContext (ValidatorImpl.java:210) org .hibernate.validator.engine.ValidatorImpl.validate (ValidatorImpl.java:119) org.springframework.validation.beanvalidation.SpringValidatorAdapter.validate (SpringValidatorAdapter.java:86) org.springframework.validation.DataBinder.validate (DataBinder.java) : 692) org.springframework.web.bind.annotation.support.HandlerMethodInvoker.doBind (HandlerMethodInvoker.java:807) org.springframework.web.bind.annotation.support.HandlerMethodInvoker.resolveHandlerArguments (HandlerMethodInvoker.java:359) org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod (HandlerMethodInvoker.java:171) org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod (AnnotationMethodHandlerAdapter.java:426) org.springframework .web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle (AnnotationMethodHandlerAdapter.java:414) org.springframework.web.servlet.DispatcherServlet.doDispatch (DispatcherServlet.java:790) org.springframework.web.servlet.DispatcherServlet.doService (DispatcherServlet.java:719) org.springframework.web.servlet.FrameworkServlet.processRequest (FrameworkServlet.java:644) org.springframework.web.servlet.FrameworkServlet.doPut (FrameworkServlet.java:571) javax.servlet. http.HttpS ervlet.service (HttpServlet.java:640) javax.servlet.http.HttpServlet.service (HttpServlet.java:717) org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:290) org.apache .catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:206) org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter.doFilterInternal (OpenEntityManagerInViewFilter.java:113) org.springframework.web.filter.OncePerRequestFilter.doFilter (OncePerRequestFilter .java: 76) org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:235) org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:206) org.springframework.security. web.FilterChainProxy $ Virtua lFilterChain.doFilter (FilterChainProxy.java:368) org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke (FilterSecurityInterceptor.java:109) org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter (FilterSecurityInterceptor.java:83) org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter (FilterChainProxy. java: 380) org.springframework.security.web.access.ExceptionTranslationFilter.doFilter (ExceptionTranslationFilter.java:97) org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter (FilterChainProxy.java:380) org.springframework .security.web.session.SessionManagementFilter.doFilter (SessionManagementFilter.java:100) org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter (FilterChainProxy.java:380) org.springframework.security.web.authentication.Anon ymousAuthenticationFilter.doFilter (AnonymousAuthenticationFilter.java:78) org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter (FilterChainProxy.java:380) org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter (SecurityContextHolderAwareRequestFilter.java: 54) org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter (FilterChainProxy.java:380) org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter (RequestCacheAwareFilter.java:35) org.springframework.security .web.FilterChainProxy $ VirtualFilterChain.doFilter (FilterChainProxy.java:380) org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilter (BasicAuthenticationFilter.java:177) org.spring framework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter (FilterChainProxy.java:380) org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter (AbstractAuthenticationProcessingFilter.java:187) org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter (FilterChainProxy.java:380) org.springframework.security.web.authentication.logout.LogoutFilter.doFilter (LogoutFilter.java:105) org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter (FilterChainProxy. java: 380) org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter (SecurityContextPersistenceFilter.java:79) org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter (FilterChainProxy.java:380) org.springframework.security.web.FilterChainProxy.doFilter (FilterChainProxy.java:169) org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate (DelegatingFilterProxy.java:237) org.springframework.web.filter.DelegatingFilterProxy.doFilter (DelegatingFilterProxy.java:167) org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:235) org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:206) de.humanfork. security.crsf.IdempotentCsrfPreventionFilter.doFilter (IdempotentCsrfPreventionFilter.java:99) org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:235) org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java: 206) org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal (HiddenHttpMethodFilter.java:74) org.springframework.web.filter.OncePerRequestFilter.doFilter (OncePerRequestFilter.java:76) org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:235) org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:206) org.springframework.web.multipart.support.MultipartFilter.doFilterInternal (MultipartFilter.java:113) org. springframework.web.filter.OncePerRequestFilter.doFilter (OncePerRequestFilter.java:76) org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:235) org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java: 206) org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal (CharacterEncodingFilter.java:88) org.springframework.web.filter.OncePerRequestFilter.doFilter (OncePerRequestFilter.java:76) org.apache.catalina.core .ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:235) org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:206) org.apache.catalina.core.StandardWrapperValve.invoke (StandardWrapperValve.java:233) org.apache.catalina.core.StandardContextValve.invoke (StandardContextValve.java:191) org.apache.catalina.core.StandardHostValve.invoke (StandardHostValve.java:127) org.apache.catalina.valves.ErrorReportValve.invoke (ErrorReportValve.java:102) org.apache.catalina.core.StandardEngineValve.invoke (StandardEngineValve.java:109) org.apache.catalina.connector.CoyoteAdapter.service (CoyoteAdapter.java:298) org.apache.coyote.http11.Http11Processor.process (Http11Processor.java:859) org.apache.coyote.http11.Http11Protocol $ Http11ConnectionHandler.process (Http11Protocol.java:588) org.apache.tomcat.util.net.JIoEndpoint $ Worker.run (JIoEndpoint.java:489) java.lang.Thread.run (Thread.java:662)

Así que mi pregunta es cómo invocar métodos estáticos dentro de la etiqueta de script?

No me digas que puedo implementar mi validador en lugar de utilizar la etiqueta @Script.

Respuesta

3

El nombre de clase de la clase con el método estático debe estar totalmente calificado.

ScriptAssert(script="com.example.demo.ComplexValidation.isComplexSubValid(_this.attributeA,_this.attributeB)", 
      lang = "javascript") 

isComplexSubValid public static boolean (objeto a, objeto b) ...

Cuestiones relacionadas