Сообщение о нарушении ограничений JPA не может быть показано на веб -уровнеJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Сообщение о нарушении ограничений JPA не может быть показано на веб -уровне

Сообщение Anonymous »

У меня есть старая система (Java8 JEE7 Glassfish5 Spring5), которая включает EJB и веб -уровни. Недавно я перенес его в новую систему (Java17 JEE10 Glassfish7 Spring6). После всех изменений кодирования и конфигурации я наконец -то выполняю большинство из них, за исключением распространения результатов проверки JPA на веб -уровни. Вот мое кодирование. В сущности у меня есть < /p>

Код: Выделить всё

@Entity
public class Student {
...
@NotNull
private String name;
@Max(20)
private int age;
< /code>
В старой системе у меня есть Spring's Dispatcher-servlet.xml < /p>



< /code>
В новой системе я использую класс WebConfig вместо < /p>
@Bean
public MessageSource messageSource() {
ReloadableResourceBundleMessageSource source = new ReloadableResourceBundleMessageSource();
source.setBasename("/WEB-INF/messages");
source.setDefaultEncoding("UTF-8");
return source;
}
< /code>
и добавил это в web.xml < /p>

contextConfigLocation
test.config.WebConfig

Я проверил, что сообщения.

Код: Выделить всё

NotNull.studentForm.name = must not be blank
Max.studentForm.age = must not be older than {value}
typeMismatch.studentForm.age = must be numeric
< /code>
В пружинном контроллере < /p>
@Controller
public class StudentMaint {
....
@RequestMapping(value = "/StudentMaintEdit.htm")
public String edit(@ModelAttribute("studentForm") @Valid StudentForm form,
BindingResult result, Map model, HttpServletRequest request) throws Exception {
if (result.hasErrors()) {
form.setMode("show");
return "StudentMaint";
}
....... (no validation coding here)
studentFacade.edit(student);     (no try/catch for any exception here)
< /code>
Студенческаяфакада также не имеет никакого кодирования, связанного с валидацией < /p>
in inductionform < /p>
@Component
public class StudentForm {
....
@Valid
private String name;
@Valid
private int age;
< /code>
Единственная разница между старой и новой системой - это использование класса конфигурации вместо XML. Другое кодирование, связанное с валидацией, вообще не имеет изменений. В старой системе сообщения об ошибках проверки правильно устанавливаются контроллером и отображаются через JSP: имя 
не должно быть пустым , а возраст будет иметь число, должно быть, или должно быть меньше или равным 20 (примечание: последний из них не из сообщений.properties). Но в новой системе только первые два нарушения показаны правильно, последнее вызывает исключение нарушения ограничений и показывает трассу стека. Насколько я понимаю, первые два - это весенняя проверка на веб -уровне, в то время как последняя - валидация JPA на уровне EJB. Но каким -то образом в старой системе нарушение JPA может быть распространено на веб -уровни с сообщением по умолчанию, должно быть меньше или равно 20 , в то время как в новой системе она не была. Что я пропустил? Я также добавил ловца в контроллере, чтобы поймать нарушение < /p>
@ExceptionHandler(ConstraintViolationException.class)
public String handleConstraintViolation(ConstraintViolationException ex,
Model model, HttpServletRequest request) {
Set

Подробнее здесь: https://stackoverflow.com/questions/797 ... n-web-tier
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»