我有一个Spring MVC应用程序使用Hibernate 4来保存到数据库(很常见,我知道)哈哈。
在我的Controller中,我的POST方法定义为:
@RequestMapping(method = RequestMethod.POST)
public String processSubmit(HttpServletRequest request, ModelMap model, @ModelAttribute("command") TemplateVO command, BindingResult result, RedirectAttributes redirectAttrs) {
...
service.addTemplate(command, result);
...
}
此方法接受表单对象,填充实体并调用session.save()
方法。
@Override
public void addTemplate(TemplateVO form, Errors errors) {
TemplateEntity template = convert(form);
save(template, errors);
}
以下是save()
方法:
@Override
public void save(Object saveObject, Errors errors) {
try {
session = HibernateUtil.getSessionFactory().openSession();
session.beginTransaction();
// Save the object
session.save(saveObject);
}catch (Exception e) {
log.error("Error with Hibernate: ", e);
session.getTransaction().rollback();
}finally {
try {
session.getTransaction().commit();
session.close();
}catch(ConstraintViolationException cve) {
log.error("Oracle constraint violation: ", cve);
errors.reject("error.someError");
errors.rejectValue("mainText",
"error.someError",
new Object[]{"test"},
"Some error occurred");
}catch (NullPointerException npe) {
log.error("Error closing session. Session is NULL", npe);
}catch (Exception e) {
log.error("Unknown error thrown when saving:", e);
}
}
}
错误代码确实存在于messages.properties文件中。
在Oracle中,我对字段调用GUID有唯一约束。我现在正在测试应用程序并尝试输入一个与已存在的名称相同的GUID。这工作正常,唯一约束是抛出并捕获在上面的代码中。
我尝试以几种方式填充errors
。我尝试使用<form:errors path="*" cssClass="errorblock" element="div" />
但没有任何显示,所以我尝试按照自己的方式直接调用addTemplate()
:
if (result.hasErrors()) {
List<ObjectError> errorList = result.getGlobalErrors();
String errors = "";
for (FieldError error : errorList) {
errors += error.getDefaultMessage() + "\n";
}
...
}
但是,上面总是只显示“null”。
所有这些(哈哈),如何从save()
方法返回错误并将其一直返回到Controller?
非常感谢您的帮助!
答案 0 :(得分:0)
问题在于:
List<ObjectError> errorList = result.getGlobalErrors();
应该是:
List<FieldError> errorList = result.getFieldErrors();
切换后,我现在收到错误消息