Forms Spring MVC:生成表单时出现NullReferenceException
我很难解决这个问题。当我尝试转到/users/addurl时抛出异常,该url应显示用于创建用户条目的空表单。之后,此异常将传播到整个应用程序 以下是控制器代码:Forms Spring MVC:生成表单时出现NullReferenceException,forms,spring-mvc,nullreferenceexception,Forms,Spring Mvc,Nullreferenceexception,我很难解决这个问题。当我尝试转到/users/addurl时抛出异常,该url应显示用于创建用户条目的空表单。之后,此异常将传播到整个应用程序 以下是控制器代码: @Controller @SessionAttributes(value = "user") @RequestMapping(value = "/users") public class UserController { @Inject private UserService userService; @R
@Controller
@SessionAttributes(value = "user")
@RequestMapping(value = "/users")
public class UserController {
@Inject
private UserService userService;
@RequestMapping(value = "/", method = RequestMethod.GET)
public ModelAndView getAllUsers() {
List<User> users = userService.getAllUsers();
return new ModelAndView("allUsers", "users", users);
}
@RequestMapping(value = "/add", method = RequestMethod.GET)
public ModelAndView addUser(ModelMap map, @RequestParam(value = "id", required = false) Long id) throws EntityNotFoundException {
User user = null;
if(id != null) {
user = userService.findById(id);
if(user == null)
throw new EntityNotFoundException("Can't find user!");
}
else {
user = new User();
user.setGender(Gender.MALE);
}
map.addAttribute("genders", generateGenders());
return new ModelAndView("addUser", "user", user);
}
@RequestMapping(value = "/add", method = RequestMethod.POST)
public ModelAndView addUser(ModelMap map, @Valid @ModelAttribute(value = "user") User user, BindingResult result,
HttpServletResponse response, final RedirectAttributes redirectAttributes) throws IOException {
if(!result.hasErrors()) {
try {
String userStatus = user.getId() != null ? "User Updated: " : "User Created: ";
userService.saveOrUpdateUser(user);
redirectAttributes.addFlashAttribute("userStatusMessage", userStatus + user.toString());
return new ModelAndView(new RedirectView("/users"));
} catch (EntityNotFoundException e) {
response.sendError(HttpServletResponse.SC_NOT_FOUND, e.getMessage());
return null;
}
}
else {
for (ObjectError error : result.getAllErrors()) {
System.out.println(error.getObjectName() + ": " + error.getDefaultMessage());
}
}
map.addAttribute("genders", generateGenders());
return new ModelAndView("addUser", "user", user);
}
@RequestMapping(value = "/delete", method = RequestMethod.GET)
public ModelAndView deleteUser(@RequestParam(value = "id", required = true) Long id,
HttpServletResponse response, final RedirectAttributes redirectAttributes) throws IOException {
try {
User user = userService.deleteUser(id);
redirectAttributes.addFlashAttribute("userStatusMessage", "Deleted User: " + user);
} catch (EntityNotFoundException e) {
response.sendError(HttpServletResponse.SC_BAD_REQUEST, e.getMessage());
return null;
}
return new ModelAndView(new RedirectView("/users"));
}
private Map<String, String> generateGenders() {
Map<String,String> genders = new HashMap<String,String>();
for (Gender gender : Gender.values()) {
genders.put(gender.toString(), gender.getDisplayName());
}
return genders;
}
}
有什么建议吗?我发现了问题所在。它位于用户类的toString()方法内部。我还是不是舒尔,因为我没有明确地称呼它。很抱歉给您带来不便 这是之前的User toString()方法:
@Override
public String toString() {
return String.format("%d, %s %s, %s, %s, %s, %s", this.getId(), this.getFirstName(), this.getLastName(),
new SimpleDateFormat("yyyy-MM-dd").format(this.getBirthday()), this.getGender().getDisplayName(), this.getPersonalNumber(),
this.getEmail());
}
这是一个解决方案:
@Override
public String toString() {
return String.format("%d, %s %s, %s, %s, %s, %s", this.getId(), this.getFirstName(), this.getLastName(),
this.getBirthday() == null ? "" : new SimpleDateFormat("yyyy-MM-dd").format(this.getBirthday()), this.getGender().getDisplayName(), this.getPersonalNumber(),
this.getEmail());
}
它在User.java中给出了一个空指针异常。我知道空指针在用户的某个地方,但我不知道如何修复它。问题是,我在addUser(ModelMap,@RequestParam(value=“id”,required=false)Long id中设置了用户对象。@RequestMapping(value=“/add”)--您为两个方法分配了相同的值。是吗?是的。但一个用于GET,另一个用于POST请求方法。请尝试使用记录器。找出它是否进入方法中。私有静态最终记录器=Logger.getLogger(UserController.class);logger.info(“测试”);
@Override
public String toString() {
return String.format("%d, %s %s, %s, %s, %s, %s", this.getId(), this.getFirstName(), this.getLastName(),
this.getBirthday() == null ? "" : new SimpleDateFormat("yyyy-MM-dd").format(this.getBirthday()), this.getGender().getDisplayName(), this.getPersonalNumber(),
this.getEmail());
}