javax.servlet.ServletException: HV000030: Не може да бъде намерен валидатор за тип: java.lang.Integer

Трябва да актуализирам информацията в моята база данни.

FacadePatient.java код на класа:

public Patient update(Patient p) {

    Patient pat = em.find(Patient.class, p.getPatientId());
    p.setPatientPhone(pat.getPatientPhone());
    p.setPatientDateNaiss(pat.getPatientDateNaiss());
    p.setPatientEmail(pat.getPatientEmail());
    p.setPatientJob(pat.getPatientJob());
    p.setPatientSmoking(pat.getPatientSmoking());
    p.setPatientSize(pat.getPatientSize());
    em.merge(pat);
    return p;
}

person Héla    schedule 12.06.2013    source източник
comment
Добре, тогава какъв е проблемът, че получавате изключение на валидатора или че не знаете откъде да започнете?   -  person JoshDM    schedule 13.06.2013
comment
дава тази грешка: javax.validation.UnexpectedTypeException: HV000030: Не може да бъде намерен валидатор за тип: java.lang.Integer,   -  person Héla    schedule 13.06.2013
comment
Също така промених атрибута Type от цяло число на низ, но същата грешка   -  person Héla    schedule 13.06.2013
comment
Защото това не е проблем с JSF или PrimeFaces. Ако сте заковали този, който хвърля това изключение, като просто погледнете проследяването на стека (javax.validation.UnexpectedTypeException ще се появи като първопричина; неговото име на пакет javax.validation от своя страна подсказва за проблем в JSR303 валидирането на bean; кодът за грешка HVxxxxxx от своя страна подсказва за проблем от Hibernate Валидатор), тогава бихте маркирали този въпрос като [bean-validation] и тогава въпросът ще бъде много по-бързо разбран/отговорен. Целият JSF код, публикуван досега, е без значение.   -  person BalusC    schedule 13.06.2013
comment
Този въпрос е свързан и с javax.servlet.ServletException: HV000030: Не може да бъде намерен валидатор за тип: java.util.Date. За разбирането,   -  person Rodmar Conde    schedule 14.10.2014


Отговори (4)


HV000030: Не може да бъде намерен валидатор за тип: java.lang.Integer

Това ще се случи, когато използвате валидиране на JSR303 bean във вид на Hibernate Validator и имате във вашия JPA обект специфичното за Hibernate @NotEmpty на Integer свойство като това:

@NotEmpty
private Integer some;

Това е напълно погрешно. Цяло число не може да се разглежда като низ, колекция, карта или масив. Вместо това използвайте стандартния @NotNull.

@NotNull
private Integer some;

Моля, имайте предвид, че конкретният проблем е напълно несвързан с JSF. В бъдеще, моля, научете се как да изключвате възможно най-много шум и да фиксирате конкретния проблем, като напр. изпълнение на JPA кода индивидуално. Тук JSF е просто HTTP/MVC месинджър, а PrimeFaces е просто генератор на HTML/CSS/jQuery/UI код.

person BalusC    schedule 13.06.2013
comment
Е, срещам същата грешка в различен (но много глупав) сценарий: @Pattern(regexp = "[1-9][0-9]{9}", message = "Phone numbers are 10 digit numbers") private int phoneNumber; --› коригирано само от :private String phoneNumber; - person Mr_and_Mrs_D; 03.02.2014
comment
Същата грешка възниква при @Size(max=2). По някаква причина Apache MyFaces 2.2 показва грешката в поле за предупреждение в моето JSF приложение, докато Mojarra на Oracle не. - person Stephan Rauh; 13.02.2015
comment
@Stephan: Това ще се случи, когато бъде хвърлено изключение по време на ajax заявка (проверете регистрационните файлове на сървъра!). Mojarra показва това предупреждение само по време на етапа на разработка. Този проблем не е свързан с зададения в момента въпрос. Вижте също a.o. stackoverflow.com/questions/ 27526753/ - person BalusC; 13.02.2015

все още ли получаваш изключение? ако да, какво е това?
person kamel2005    schedule 13.03.2016
comment
Получих тази грешка в същата ситуация. Но защо получаваме тази грешка. Тъй като преди това работеше в моя проект. По-късно получих тази грешка поради @Size. - person Hema; 10.07.2017
comment
Това също може да е причината. размерът на int, boolean, tinyint причинява този проблем. благодаря за коментара - person Ishimwe Aubain Consolateur; 12.05.2018

Може да получите този проблем и в случаи като по-долу;

@Size(max = 45, message = "Field 'SomeEntityClass.yourEnumType' cannot exceed 45 characters") @Column(length=45)
@Enumerated(EnumType.STRING)
private SomeEnumType yourEnumType;

Това е така, защото по време на валидиране поредната стойност на 'yourEnumType' (която е от целочислен тип) се обработва преди съпоставянето на низ, което Hibernate разрешава, преди да съхрани стойността в базата данни.

person Bell Katapa    schedule 16.05.2017

Също така, ако е налице някакво ограничение, което не е валидно за цяло число, то ще предизвика тази грешка. Като анотиране на цяло число с:

  • @Дължина (макс. = 3)
  • @Размер
person cabaji99    schedule 10.10.2018