2013-01-29 3 views
0

Мое требование состоит в том, что я хочу, чтобы проверка в поле формы im выполнялась с использованием класса весового валидатора и регулярного выражения, так что я делаю здесь, я проверяю свое поле DepartmentName, которое находится в String. нет числового значения где угодно. Эта проверка im выполняется с использованием выражения regex [0-9], потому что если он содержит любое числовое значение, то matcher.find() возвращает true, если он возвращает true. Я бросаю сообщение об ошибке. Так что проблема в том, что когда я предоставляю строку с не числовым значением, проверка выполняется если im предоставляет чистую строку, то все равно ее бросает одно и то же сообщение, если я снова запустил приложение с предоставлением чистого значения String, а затем его работу, но если я снова предоставляю неправильную запись, выполняется проверка, но после этого, если m обеспечивает правильную запись тем же сообщение броска так каждый раз, когда мне нужно, чтобы запустить мое приложение, пожалуйста, решить эту проблемуПроблема с валидацией с использованием regex на классе валидатора весны

вот мой валидатор класс

package com.ankur.tutorial.validator; 
import java.util.regex.Matcher; 
import java.util.regex.Pattern; 
import org.springframework.validation.Errors; 
import org.springframework.validation.Validator; 
import com.nousinfo.tutorial.service.model.DepartmentBO; 

public class DepartmentValidator implements Validator { 

    boolean found = false; 

    public boolean supports(Class<?> arg0) { 

     return DepartmentBO.class.isAssignableFrom(arg0); 
    } 

    public void validate(Object object, Errors errors) { 
     DepartmentBO departmentBO = (DepartmentBO) (object); 
     System.out.println(departmentBO.getDepartmentName()); 

     if (departmentBO.getDepartmentName().equals("")) { 

      errors.rejectValue("departmentName", "department.Name"); 
     } else { 
      Pattern pattern = Pattern.compile("[0-9]"); 
      Matcher matcher = pattern.matcher(departmentBO.getDepartmentName()); 
      while (matcher.find()) { 
       found = true; 

      } 
      System.out.println(found); 
      if (found) { 
       errors.rejectValue("departmentName", "department.string"); 
      } 

     } 

    } 

} 

это мой контроллер

package com.nousinfo.tutorial.controllers; 
import java.util.Map; 
import javax.validation.Valid; 
import org.springframework.stereotype.Controller; 
import org.springframework.ui.Model; 
import org.springframework.validation.BindingResult; 
import org.springframework.web.bind.annotation.ModelAttribute; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 
import org.springframework.web.servlet.ModelAndView; 
import com.nousinfo.tutorial.model.DepartmentForm; 
import com.nousinfo.tutorial.service.impl.DepartmentServiceImpl; 
import com.nousinfo.tutorial.service.model.DepartmentBO; 
import com.nousinfo.tutorial.validator.DepartmentValidator; 


@Controller 
@RequestMapping("departmentController") 
public class DepartmentController { 
    private DepartmentServiceImpl departmentServiceImpl; 

    private DepartmentValidator departmentValidator; 

    public DepartmentServiceImpl getDepartmentServiceImpl() { 
     return departmentServiceImpl; 
    } 

    public void setDepartmentServiceImpl(
      DepartmentServiceImpl departmentServiceImpl) { 
     this.departmentServiceImpl = departmentServiceImpl; 
    } 

    public DepartmentValidator getDepartmentValidator() { 
     return departmentValidator; 
    } 

    public void setDepartmentValidator(DepartmentValidator departmentValidator) { 
     this.departmentValidator = departmentValidator; 
    } 

    /** 
    * Set to set the view 
    * 
    * @param model 
    * @return 
    * @throws Exception 
    */ 
    @RequestMapping(value = "/departmentForm", method = RequestMethod.GET) 
    public String view(Model model) throws Exception { 
     DepartmentBO departmentBO = new DepartmentBO(); 
     model.addAttribute("departmentBO", departmentBO); 
     return "departmentForm"; 
    } 

    /** 
    * Create the department 
    * 
    * @param departmentForm 
    * @param bindingResult 
    * @param model 
    * @return 
    * @throws Exception 
    */ 
    @RequestMapping(value = "/createDepartment", method = RequestMethod.POST) 
    public ModelAndView createEmployee(
      @ModelAttribute("departmentBO") DepartmentBO departmentBO, 
      BindingResult bindingResult) throws Exception { 
     ModelAndView modelAndView = new ModelAndView(); 

     departmentValidator.validate(departmentBO, bindingResult); 
     if (bindingResult.hasErrors()) { 
      modelAndView.setViewName("departmentForm"); 
      return modelAndView; 
     } 

     modelAndView.addObject("departmentBO", departmentBO); 

     if (departmentBO.getUpdateStatus() == 'A') { 
      boolean flag = departmentServiceImpl.actionDecider(departmentBO); 
      if (flag == false) 
       modelAndView.setViewName("DBError"); 
      else 
       modelAndView.setViewName("Success"); 

     } 
     return modelAndView; 
    } 

ответ

0

У вас есть переменная найденную как свойство класса. Валидаторы являются одноточечными. Переместите переменную, найденную внутри метода проверки.

+0

спасибо, что его работа – henrycharles

+0

еще одна вещь, я просто подтверждаю, что по умолчанию весь весенний класс является singeleton до тех пор, пока мы не изменим область действия в xml-файле, я прав? – henrycharles

+0

Да. Весенние бобы по умолчанию являются одиночными. – gouki

Смежные вопросы