Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> #springBind выкидывает ошибку. Только в одной из форм... 
:(
    Опции темы
Juggernaut
Дата 19.11.2009, 10:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 4.12.2005

Репутация: 1
Всего: 2



Я могу предположить, что у тебя @Autowired не работает, т.к. ты класс валидатора как spring-bean не зарегестрировал.

Если ты используешь только аннотации, тогда надо валидатор аннотировать как @Component и и сам валидатор должен лежать в package, который прописан у тебя в component-scan.

Если ты используешь xml-декларации, то надо объявить как <bean id="empfValidator" ..../>

Плюс если уже использовать DI до конца, то можно и валидатор заинжектить в контроллер, не объявлять его через new.
PM MAIL   Вверх
ShurikA
Дата 19.11.2009, 11:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зануда
***


Профиль
Группа: Завсегдатай
Сообщений: 1364
Регистрация: 29.10.2005
Где: Канада

Репутация: нет
Всего: 3



Цитата(Juggernaut @  19.11.2009,  09:41 Найти цитируемый пост)
тогда надо валидатор аннотировать как @Component и и сам валидатор должен лежать в package, который прописан у тебя в component-scan.

Не помогает.

Код

package backend.config.employee.command;

import iib.service.employee.config.EmployeeConfigService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.validation.Errors;
import org.springframework.validation.Validator;

/**
 *
 * @author ShurikAg
 */
@Component
public class EmployeePositionFormValidator implements Validator {

    @Autowired
    private EmployeeConfigService employeeConfigService;

    private static final String DESCRIPTION_REGEXP = "[A-Za-z0-9 ._-]{3,}";

    public boolean supports(Class clazz) {
        return EmployeePositionFormCommand.class.isAssignableFrom(clazz);
    }

    public void validate(Object target, Errors errors) {
        EmployeePositionFormCommand epfc = (EmployeePositionFormCommand) target;
        if (!epfc.getDescription().trim().matches(DESCRIPTION_REGEXP)) {
            errors.rejectValue("description", "employee.config.pos.description.not_valid", "Entered employee position is not valid!");
        }
        //duplicates
        Boolean isDuplicate = false;
        if(epfc.getEmplPosId() != null){
            isDuplicate = employeeConfigService.isDuplicateEmployeePosition(epfc.getEmplPosId(), epfc.getDescription().trim());
        } else {
            isDuplicate = employeeConfigService.isDuplicateEmployeePosition(epfc.getDescription().trim());
        }
        if(isDuplicate){
            errors.rejectValue("description", "employee.config.pos.description.duplicate", "Duplicate employee position!");
        }
    }
}


Код

<context:component-scan base-package="backend,iib"/>


Добавлено через 2 минуты и 11 секунд
Цитата(Juggernaut @  19.11.2009,  09:41 Найти цитируемый пост)
Если ты используешь xml-декларации, то надо объявить как <bean id="empfValidator" ..../>

Тоже ноль на массу...


--------------------
Если долго мучиться, что нибудь получится...
user posted image
PM MAIL WWW ICQ Skype   Вверх
ShurikA
Дата 21.11.2009, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зануда
***


Профиль
Группа: Завсегдатай
Сообщений: 1364
Регистрация: 29.10.2005
Где: Канада

Репутация: нет
Всего: 3



Так, на помощь!!!!!   smile 
Ну никак не хочет он рапотать...
Добился того что бы нормаль работали инджекшены так что мой контроллер сечас выглядит так:
Код

@Controller("employeePositionController")
public class EmployeePositionCtrl {

    @Autowired
    private EmployeeConfigService employeeConfigService;

    @Autowired(required=true)
    private EmployeePositionFormValidator employeePositionFormValidator;

    @RequestMapping(value = "/emplPoses", method = RequestMethod.GET)
    public ModelAndView showEmployeePositionsList() {
        ModelAndView mv = new ModelAndView("config/empl/employeePositionsList");
        //get all available employee positions
        List<EmployeePosition> emplPoses = employeeConfigService.getAllEmployeePositions();

        //add to view
        mv.addObject("emplPoses", emplPoses);

        return mv;
    }

    /**
     * Shows employee position form
     * @param epId
     * @return
     */
    @RequestMapping(value = "/emplPos.form", method = RequestMethod.GET)
    public ModelAndView showEmployeePositionForm(@RequestParam(value = "epId", required = false) Integer epId) {
        EmployeePositionFormCommand epfComm = new EmployeePositionFormCommand();
        if (epId != null) {
            EmployeePosition epObj = employeeConfigService.findEmployeePositionById(epId);
            if (epObj instanceof EmployeePosition) {
                epfComm.setEmplPosId(epObj.getId());
                epfComm.setDescription(epObj.getDescription());
                epfComm.setActive(epObj.getActive());
            } else {
                return new ModelAndView(new RedirectView("emplPoses"));
            }
        }
        return new ModelAndView("config/empl/employeePositionForm", "employeePosFormCommand", epfComm);
    }

    /**
     * Processes Employee position form
     * @param epfComm
     * @param br
     * @return
     */
    @RequestMapping(value = "/emplPos.form", method = RequestMethod.POST)
    public ModelAndView processEmployeePositionForm(EmployeePositionFormCommand epfComm, BindingResult br) {
        employeePositionFormValidator.validate(epfComm, br);
        if (br.hasErrors()) {
            return new ModelAndView("config/empl/employeePositionForm", br.getModel());
        }
        SystemUser su = (SystemUser) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
        String redUrl = "";
        EmployeePosition epObj = null;
        if (epfComm.getEmplPosId() instanceof Integer && epfComm.getEmplPosId() > 0) {
            //update existing
            epObj = employeeConfigService.updateEmployeePosition(epfComm.getEmplPosId(), epfComm.getDescription(), epfComm.getActive(), su);
            redUrl = "emplPos.form?epId=" + epObj.getId();
        } else {
            //create new
            epObj = employeeConfigService.createEmployeePosition(epfComm.getDescription(), epfComm.getActive(), su);
            redUrl = "emplPoses";
        }

        return new ModelAndView(new RedirectView(redUrl));
    }

    /**
     * Binders
     * @param binder
     */
    @InitBinder
    public void initBinder(WebDataBinder binder) {
        binder.registerCustomEditor(Integer.class, new CustomNumberEditor(Integer.class, true));
        binder.registerCustomEditor(Boolean.class, new CustomBooleanEditor("on", "", true));
    }
}


при этом, если вот тут:
Код

...
employeePositionFormValidator.validate(epfComm, br);
        if (br.hasErrors()) {
            return new ModelAndView("config/empl/employeePositionForm", br.getModel());
        }
...


валидация не проходит, то вместо того что бы спокойно показать опять ту же форму с ошибкой, получаю следующее:
Код

org.springframework.web.util.NestedServletException: Method invocation failed during rendering of Velocity view with name 'config/empl/employeePositionForm': Invocation of method 'getBindStatus' in  class org.springframework.web.servlet.support.RequestContext threw exception java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'employeePosFormCommand' available as request attribute at org/springframework/web/servlet/view/velocity/spring.vm[line 88, column 52]; reference [springMacroRequestContext], method 'getBindStatus'; nested exception is java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'employeePosFormCommand' available as request attribute


и самое интересное, что у меня есть 3 достаточно похожих контроллеров. и все прекрасно работают кроме этого.   smile  smile  smile  smile 

Где я туплю?


--------------------
Если долго мучиться, что нибудь получится...
user posted image
PM MAIL WWW ICQ Skype   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0687 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.