进出口新的春天开机后发现试图用一个类中的服务时的问题,我创建的验证表单的Autowire Spring不开机工作表单
我创建了一个验证类验证形式,在这里提到
https://spring.io/guides/gs/validating-form-input/
它将按预期
package com.nexill.bank.form.user;
import com.nexill.bank.entity.User;
import com.nexill.bank.repository.UserRepository;
import org.hibernate.validator.constraints.Email;
import org.hibernate.validator.constraints.NotEmpty;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Configurable;
import org.springframework.stereotype.Component;
import javax.validation.constraints.AssertTrue;
import javax.validation.constraints.Size;
@Component
@Configurable
public class UserForm {
@Autowired
UserRepository userRepository;
@Email(message = "Must be a valid email")
@NotEmpty(message = "Email cannot be empty")
private String email;
@NotEmpty(message = "Password cannot be empty")
@Size(min=6, max=30, message = "Password need to be between 6 to 30 characters")
private String password;
@NotEmpty(message = "Confirm password cannot be empty")
@Size(min=6, max=30, message = "Confirm password need to be between 6 to 30 characters")
private String confirmPassword;
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getConfirmPassword() {
return confirmPassword;
}
public void setConfirmPassword(String confirmPassword) {
this.confirmPassword = confirmPassword;
}
@AssertTrue(message = "Password and confirm password need to match")
public boolean isDifferentPass() {
return !password.equals(confirmPassword) ? false : true;
}
@AssertTrue(message = "Email already exists")
public boolean isUniqueEmailForUser() {
User x = userRepository.findUserByEmail(getEmail());
return (x) == null;
}
}
的问题是即时得到HV000090:无法访问isUniqueEmailForUser。
当我侵入存储库是null.I已经使用userRepository系统中的其他地方autowire和它按预期工作。
主要包是com.nexill.bank包。我缺少什么。
形式在控制器用于等预先此
@RequestMapping(value = "/adminDashboard/user", method= RequestMethod.POST)
public ModelAndView adminDashboardAddUserPost(ModelAndView modelAndView, @Valid UserForm userForm, BindingResult bindingResult) {
modelAndView.addObject("currentUser", authenticationFacade.getUser());
modelAndView.addObject("userForm", userForm);
if (!bindingResult.hasErrors()) {
User user = new User(userForm);
user.setRole(roleService.getRepository().findByName("BANK_STAFF"));
userService.createUser(user);
ModelAndView redirectModelAndView = new ModelAndView("redirect:/adminDashboard");
redirectModelAndView.addObject("saveStatus" , true);
return redirectModelAndView;
}
modelAndView.setViewName("adminDashboard/user");
return modelAndView;
}
感谢。
你如何创建对象的代码?我想你试图验证控制器中的对象,但在这种情况下,该对象不是一个bean,但从请求创建。所以这个版本库不是自动装配的。 – StanislavL
您好StanislavL问题更新与控制器中的代码,因为我的理解表单也注入here.I不知道底层behaviour.Hope这有助于清除问题。 –