#java #spring-boot #hibernate #thymeleaf
#java #spring-boot #спящий режим #thymeleaf
Вопрос:
Я делаю регистрацию в Spring Boot, используя Spring Data JPA. Я столкнулся с проблемой размещения длинных значений в поле формы.
Класс модели: я использовал @NotBlank
аннотацию раньше private long nsuID
, но когда форма перенаправляет nsuID
, поле заполняется на 0.
@Entity
@Table(name="alumnies",uniqueConstraints = @UniqueConstraint(columnNames = "email") )
public class Alumni {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@Column(name="NSU_ID")
@NotBlank
private long nsuID;
public long getNsuID() {
return nsuID;
}
public void setNsuID(long nsuID) {
this.nsuID = nsuID;
}
}
HTML-файл:
<div class="form-group"
th:classappend="${#fields.hasErrors('nsuID')}? 'has-error':''">
<label for="nsuID" class="control-label">NSU ID</label> <input
id="nsuID" class="form-control" th:field="*{nsuID}" />
<p class="error-message"
th:each="error : ${#fields.errors('nsuID')}"
th:text="${error}">Validation error</p>
</div>
Класс контроллера:
@Controller
public class RegistraionController {
@Autowired
private UserService us;
@GetMapping("/")
public String showRegistration(Model model) {
Alumni alumni = new Alumni();
model.addAttribute("alumni", alumni);
return "registration";
}
@PostMapping("/registration")
public String saveAlumni(@ModelAttribute("alumni") @Validated Alumni alumni, BindingResult bindingResult) {
Alumni existing = us.findByEmail(alumni.getEmail());
if (existing != null) {
bindingResult.rejectValue("email", null, "There is already an account registered with that email");
}
if (bindingResult.hasErrors()) {
return "registration";
}
us.saveAlumni(alumni);
return "redirect:/";
}
}
Ответ №1:
Как сказал @Dip Халани, переменная типа long не может содержать нулевое значение, поскольку это переменная примитивного типа, а значение переменной типа long по умолчанию равно 0.
И ваше @NotBlank
ограничение на nsuID
неверно, потому что оно проверяет, что урезанная длина последовательности символов не пуста, обычно она используется для проверки того, что заданное строковое значение должно быть не нулевым, а урезанная длина должна быть больше нуля.
Если вы хотите проверить наличие ненулевого значения, затем используйте @NotNull
и замените long nsuID
на Long nsuID
.
Посмотрите разницу между ограничениями @NotNull, @NotEmpty и @NotBlank при проверке компонента
Ответ №2:
long не может содержать нулевые значения, поэтому может преобразовываться в 0. попробуйте изменить его на Long (класс-оболочка).
@NotBlank
private Long nsuID;