Проблема с валидацией с использованием регулярного выражения на классе валидатора весны

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

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

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
nl ja de

1 ответы

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

0
добавлено
благодаря его работе
добавлено автор henrycharles, источник
еще одна вещь, я просто подтверждаю, что по умолчанию весь весенний класс является singeleton до тех пор, пока мы не изменим область действия в xml-файле, я прав?
добавлено автор henrycharles, источник
Да. Весенние бобы по умолчанию являются одиночными.
добавлено автор gouki, источник
Spring Framework and more
Spring Framework and more
839 участник(ов)

чат о spring framework и связанных с ним технологиях. We're discussing: job, tech questions, beer meet up/networking: tech review ,LinkedIn skills, SOF q/a raise up& etc. languages: russian,java,eng.