首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SpringMVC验证问题

SpringMVC验证问题
EN

Stack Overflow用户
提问于 2012-09-01 04:26:13
回答 2查看 509关注 0票数 1

我在控制器课上遇到了一些问题。我有一个登录页面,当它第一次被调用时,Controller使用带有GET请求注释的方法。当表单发布时,它将使用带有POST请求注释的方法。

只有当表单被发布时,我才想执行验证。因此,验证检查被放置在POST方法(@Valid)中。我有一个@InitBinder函数,但是当我发布表单时不会执行这个函数,因此不会从验证类返回错误消息,也不会将'result.hasErrors()‘方法设置为false。如果我将@ false放在GET上,就会得到验证,这意味着result.hasErrors()被设置为false。

我不确定@InitBinder函数何时执行,也不确定如何只在POST请求时才允许执行。目前,当页面是GET时,唯一被执行的消息是‘欢迎它是一个get’,这是我想要的,但是我得到的帖子‘错误!它是一个post’并且验证没有被执行。下面是一些代码:

控制器类中的代码

代码语言:javascript
复制
@InitBinder("login")
protected void initBinder(WebDataBinder binder){
    binder.setValidator(new LoginValidation());

}

除了显示页面之外,我不会在GET中做任何事情。

代码语言:javascript
复制
@RequestMapping(value="login.htm", method=RequestMethod.GET)
 public ModelAndView onSubmit(HttpServletRequest request,HttpServletResponse response,Model model, @ModelAttribute("login") Login login,BindingResult result )
            throws ServletException {

            return new ModelAndView("login","errorMsg", "Welcome it was a get");             


}

代码语言:javascript
复制
@RequestMapping(value="login.htm", method=RequestMethod.POST)
public ModelAndView handleRequest(HttpServletRequest request,
        HttpServletResponse response, @Valid @ModelAttribute Login login, BindingResult result, ModelMap m) throws Exception {



         if(result.hasErrors()){


             return new ModelAndView("login", "errorMsg", "Errors was detected");

        }else{

            if (authenticationManager.Authenticate(login) == true){

                return new ModelAndView("main","welcomeMessage", message);
            }           

            return new ModelAndView("login","errorMsg", "Error!!! It was a post");

    }
EN

回答 2

Stack Overflow用户

发布于 2012-09-01 05:17:28

我的参数中有空白。在@InitBinder(“登录”)中使用binder.registerCustomEditor(String.class,新StringTrimmerEditor(true))解决了这个问题

票数 0
EN

Stack Overflow用户

发布于 2012-09-02 04:19:01

当第一次使用GET验证工作请求页面时,这主要是因为这些字段在页面请求时为空白,而@InitBinder("login")将在每次请求时页面上发生任何事情之前执行。

即使视图中的字段为空白,验证没有失败的原因主要是由于验证在页面GET请求上运行,并在数据绑定期间使用空白将对象返回给视图。

为了解决这个问题,我在验证逻辑中计算了字段的长度,并将其记录到server.When中,对日志进行了调查,发现字段不是NULLS,因为验证逻辑主要检查NULLS。

空白解决方案:在@Controller @InitBinder函数中包括:

代码语言:javascript
复制
binder.registerCustomEditor(String.class, new StringTrimmerEditor(true));

这将减少空白。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12224884

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档