Я использую пользовательскую проверку бинов, но есть исключение, когда я пытаюсь внедрить атрибут сеанса http через CDI в классе валидатора , передавая JPA bean (EclipseLink2.1) в качестве одного из аргументов;но когда я внедряю его в JSF-компонент (Mojarra 2.2), он работает, как и ожидалось.
JPA-компонент (выдержки из кода):
@Entity
@Table(name = "TaxiTrips", catalog = "DIAGE", schema = "gdt")
@XmlRootElement
@JustificativaFunciConstraint
@NamedQueries({...})
public class TaxiTrips implements Serializable {
[...]
}
Управляемый компонент (CDI) (выдержки из кода):
@Named(value = "taxiTripsController")
@ApplicationScoped
public class TaxiTripsController extends AbstractController<TaxiTrips> {
@Inject
@SessionChave
private String httpSessionChave;
private String sessionChave;
public String getSessionChave() {
return sessionChave;
}
@PostConstruct
public void init() {
sessionChave = httpSessionChave;
}
}
Класс ограничения :
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = JustificativaFunciValidator.class)
public @interface JustificativaFunciConstraint {
String message() default "Not allowed, sorry.";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
Класс проверки :
public class JustificativaFunciValidator implements ConstraintValidator<JustificativaFunciConstraint, TaxiTrips> {
@Inject
@SessionChave
private String httpSessionChave;
private String sessionChave;
@Override
public void initialize(JustificativaFunciConstraint constraintAnnotation) {
}
@Override
public boolean isValid(TaxiTrips taxiTrips, ConstraintValidatorContext context) {
if (httpSessionChave == null) {
sessionChave = "F0000000";
} else {
sessionChave = httpSessionChave;
}
return taxiTrips.getMatricula().getMatricula().equals(sessionChave);
}
@PostConstruct
public void init() {
sessionChave = httpSessionChave; //it is not injecting, the value is null here
}
}
Когда метод редактирования выполняется, запускается исключение ниже:
javax.validation.ConstraintViolationException: Bean Validation constraint(s) violated while executing Automatic Bean Validation on callback event:'preUpdate'. Please refer to embedded ConstraintViolations for details.
Я исследовал и нашел эти 2 вопроса ( вопрос 1 и вопрос 2 ), но я не знаю, что делать, чтобы решить мою проблему.
Может ли кто-нибудь мне помочь?