[英]Spring mvc validation working during new form but fail show validation when try to update
我有一個輸入表單,用於添加和更新用戶信息。 相同的提交表單可以正確執行添加和更新操作,如果我嘗試故意提交空數據/錯誤格式,則會出現問題,在嘗試添加新用戶時,驗證可以顯示消息,但不能在更新用戶上顯示。 驗證包括NotEmpty
/ Email
/ typeMismatch
等...
任何允許以相同形式顯示驗證消息的幫助嗎? 為什么嘗試添加可以顯示而不在更新期間顯示? 我剛剛啟動SpringMVC,希望有人幫忙。
提前致謝。
這是代碼:
@ModelAttribute
public void getUserDetail(@RequestParam(value = "udId", required = false)
Integer udId,
Map<String, Object> map) {
//For update UserDetail form
if (udId != null) {
UserDetail userDetail = new UserDetail();
try {
userDetail = userDetailService.getUserDetail(udId);
} catch (Exception e) {
log.error("failed to get UserDetail with udId: " + udId);
}
map.put("userDetail", userDetail);
}
}
//Add
@RequestMapping(value = "/userDetail", method = RequestMethod.POST)
public String saveUserDetail(@Valid UserDetail userDetail,
BindingResult bingdingResult) {
if (bingdingResult.getErrorCount() > 0) {
log.info("User attempt create user: " + userDetail.toString());
for (FieldError error : bingdingResult.getFieldErrors()) {
log.info(error.getField() + ": " + error.getDefaultMessage());
}
//redirect to same page to show error return infor (NotEmpty etc...)
return "/user/inputUserDetail";
} else {
try {
userDetailService.addUserDetail(userDetail);
} catch (Exception e) {
log.error("Failed to add new UserDetail: " +
userDetail.toString());
}
return "redirect:/user/userDetails";
}
}
@RequestMapping(value = "/userDetail", method = RequestMethod.PUT)
public String updateUserDetail(@Valid UserDetail userDetail,
BindingResult bingdingResult, Map<String, Object> map) {
//Update - need UserDetail model attribute
if (bingdingResult.getErrorCount() > 0) {
log.info("User attempt update user: " + userDetail.toString());
for (FieldError error : bingdingResult.getFieldErrors()) {
log.info(error.getField() + ": " + error.getDefaultMessage());
}
// redirect to same page to show error return infor (NotEmpty etc...)
// error cannot display error message
return "/user/inputUserDetail";
} else {
try {
//update user detail
userDetailService.updateUserDetail(userDetail);
} catch (Exception e) {
log.error("Failed to update UserDetail: " +
userDetail.toString());
}
return "redirect:/user/userDetails";
}
}
附加編碼:
//Service layer:
@Service("userDetailHistoryService")
@Transactional(propagation = Propagation.SUPPORTS, readOnly = true)
public class UserDetailHistoryServiceImpl implements UserDetailHistoryService{
@Override
public void updateUserDetailHistory(UserDetailHistory userDetailHistory) {
userDetailHistoryDao.updateUserDetailHistory(userDetailHistory);
}
//other coding etc.. etc...
}
@Repository("userDetail")
public class UserDetailDaoImpl implements UserDetailDao {
@Autowired
private SessionFactory sessionFactory;
//Dao layer:
@Override
public void updateUserDetail(UserDetail userDetail) {
sessionFactory.getCurrentSession().update(userDetail);
}
//other coding etc.. etc...
}
歡迎任何建議和想法? 再次感謝。
當我嘗試將更新提交到NotEmpty
字段時發生錯誤,在下面附加長錯誤消息:
>Warning: StandardWrapperValve[dispatcherServlet]: Servlet.service() for servlet dispatcherServlet threw exception
java.lang.StackOverflowError
at java.util.Collections$UnmodifiableMap.get(Collections.java:1454)
at com.mysql.jdbc.ConnectionImpl.getEncodingForIndex(ConnectionImpl.java:2780)
at com.mysql.jdbc.Field.<init>(Field.java:185)
at com.mysql.jdbc.MysqlIO.unpackField(MysqlIO.java:723)
at com.mysql.jdbc.MysqlIO.getResultSet(MysqlIO.java:418)
at com.mysql.jdbc.MysqlIO.readResultsForQueryOrUpdate(MysqlIO.java:3105)
at com.mysql.jdbc.MysqlIO.readAllResults(MysqlIO.java:2336)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2729)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2545)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2503)
at com.mysql.jdbc.StatementImpl.executeQuery(StatementImpl.java:1369)
at com.mysql.jdbc.SQLError.convertShowWarningsToSQLWarnings(SQLError.java:704)
at com.mysql.jdbc.SQLError.convertShowWarningsToSQLWarnings(SQLError.java:656)
at com.mysql.jdbc.StatementImpl.getWarnings(StatementImpl.java:2145)
at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.getWarnings(NewProxyPreparedStatement.java:1806)
at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.handleAndClearWarnings(SqlExceptionHelper.java:320)
at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.logAndClearWarnings(SqlExceptionHelper.java:273)
at org.hibernate.engine.jdbc.internal.JdbcCoordinatorImpl.close(JdbcCoordinatorImpl.java:529)
at org.hibernate.engine.jdbc.internal.JdbcCoordinatorImpl.release(JdbcCoordinatorImpl.java:421)
at org.hibernate.loader.plan.exec.internal.AbstractLoadPlanBasedLoader.executeLoad(AbstractLoadPlanBasedLoader.java:160)
at org.hibernate.loader.plan.exec.internal.AbstractLoadPlanBasedLoader.executeLoad(AbstractLoadPlanBasedLoader.java:102)
at org.hibernate.loader.entity.plan.AbstractLoadPlanBasedEntityLoader.load(AbstractLoadPlanBasedEntityLoader.java:186)
at org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:4126)
at org.hibernate.event.internal.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:503)
at org.hibernate.event.internal.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:468)
at org.hibernate.event.internal.DefaultLoadEventListener.load(DefaultLoadEventListener.java:213)
at org.hibernate.event.internal.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:146)
at org.hibernate.internal.SessionImpl.fireLoad(SessionImpl.java:1106)
at org.hibernate.internal.SessionImpl.immediateLoad(SessionImpl.java:1012)
at org.hibernate.proxy.AbstractLazyInitializer.permissiveInitialization(AbstractLazyInitializer.java:212)
at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:162)
at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:286)
at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:185)
at com.faddistwardrobe.web.model.UserDetail_$$_jvstb9a_8c.toString(UserDetail_$$_jvstb9a_8c.java)
at java.lang.String.valueOf(String.java:2994)
at java.lang.StringBuilder.append(StringBuilder.java:131)
at com.faddistwardrobe.web.model.BodyMeasure.toString(BodyMeasure.java:220)
at java.lang.String.valueOf(String.java:2994)
at java.lang.StringBuilder.append(StringBuilder.java:131)
at java.util.AbstractCollection.toString(AbstractCollection.java:462)
at org.hibernate.collection.internal.PersistentSet.toString(PersistentSet.java:317)
at java.lang.String.valueOf(String.java:2994)
at java.lang.StringBuilder.append(StringBuilder.java:131)
at com.faddistwardrobe.web.model.UserDetail.toString(UserDetail.java:283)
at sun.reflect.GeneratedMethodAccessor1366.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:196)
at com.faddistwardrobe.web.model.UserDetail_$$_jvstb9a_8c.toString(UserDetail_$$_jvstb9a_8c.java)
at java.lang.String.valueOf(String.java:2994)
at java.lang.StringBuilder.append(StringBuilder.java:131)
at com.faddistwardrobe.web.model.BodyMeasure.toString(BodyMeasure.java:220)
at java.lang.String.valueOf(String.java:2994)
at java.lang.StringBuilder.append(StringBuilder.java:131)
at java.util.AbstractCollection.toString(AbstractCollection.java:462)
at org.hibernate.collection.internal.PersistentSet.toString(PersistentSet.java:317)
at java.lang.String.valueOf(String.java:2994)
at java.lang.StringBuilder.append(StringBuilder.java:131)
at com.faddistwardrobe.web.model.UserDetail.toString(UserDetail.java:283)
at sun.reflect.GeneratedMethodAccessor1366.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:196)
at com.faddistwardrobe.web.model.UserDetail_$$_jvstb9a_8c.toString(UserDetail_$$_jvstb9a_8c.java)
at java.lang.String.valueOf(String.java:2994)
at java.lang.StringBuilder.append(StringBuilder.java:131)
at com.faddistwardrobe.web.model.BodyMeasure.toString(BodyMeasure.java:220)
at java.lang.String.valueOf(String.java:2994)
at java.lang.StringBuilder.append(StringBuilder.java:131)
at java.util.AbstractCollection.toString(AbstractCollection.java:462)
at org.hibernate.collection.internal.PersistentSet.toString(PersistentSet.java:317)
at java.lang.String.valueOf(String.java:2994)
at java.lang.StringBuilder.append(StringBuilder.java:131)
at com.faddistwardrobe.web.model.UserDetail.toString(UserDetail.java:283)
at sun.reflect.GeneratedMethodAccessor1366.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:196)
at com.faddistwardrobe.web.model.UserDetail_$$_jvstb9a_8c.toString(UserDetail_$$_jvstb9a_8c.java)
at java.lang.String.valueOf(String.java:2994)
at java.lang.StringBuilder.append(StringBuilder.java:131)
at com.faddistwardrobe.web.model.BodyMeasure.toString(BodyMeasure.java:220)
at java.lang.String.valueOf(String.java:2994)
at java.lang.StringBuilder.append(StringBuilder.java:131)
at java.util.AbstractCollection.toString(AbstractCollection.java:462)
at org.hibernate.collection.internal.PersistentSet.toString(PersistentSet.java:317)
at java.lang.String.valueOf(String.java:2994)
at java.lang.StringBuilder.append(StringBuilder.java:131)
at com.faddistwardrobe.web.model.UserDetail.toString(UserDetail.java:283)
at sun.reflect.GeneratedMethodAccessor1366.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:196)
at com.faddistwardrobe.web.model.UserDetail_$$_jvstb9a_8c.toString(UserDetail_$$_jvstb9a_8c.java)
at java.lang.String.valueOf(String.java:2994)
at java.lang.StringBuilder.append(StringBuilder.java:131)
at com.faddistwardrobe.web.model.BodyMeasure.toString(BodyMeasure.java:220)
at java.lang.String.valueOf(String.java:2994)
at java.lang.StringBuilder.append(StringBuilder.java:131)
at java.util.AbstractCollection.toString(AbstractCollection.java:462)
at org.hibernate.collection.internal.PersistentSet.toString(PersistentSet.java:317)
at java.lang.String.valueOf(String.java:2994)
at java.lang.StringBuilder.append(StringBuilder.java:131)
at com.faddistwardrobe.web.model.UserDetail.toString(UserDetail.java:283)
at sun.reflect.GeneratedMethodAccessor1366.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:196)
at com.faddistwardrobe.web.model.UserDetail_$$_jvstb9a_8c.toString(UserDetail_$$_jvstb9a_8c.java)
at java.lang.String.valueOf(String.java:2994)
at java.lang.StringBuilder.append(StringBuilder.java:131)
at com.faddistwardrobe.web.model.BodyMeasure.toString(BodyMeasure.java:220)
at java.lang.String.valueOf(String.java:2994)
at java.lang.StringBuilder.append(StringBuilder.java:131)
at java.util.AbstractCollection.toString(AbstractCollection.java:462)
at org.hibernate.collection.internal.PersistentSet.toString(PersistentSet.java:317)
at java.lang.String.valueOf(String.java:2994)
at java.lang.StringBuilder.append(StringBuilder.java:131)
at com.faddistwardrobe.web.model.UserDetail.toString(UserDetail.java:283)
at sun.reflect.GeneratedMethodAccessor1366.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:196)
at com.faddistwardrobe.web.model.UserDetail_$$_jvstb9a_8c.toString(UserDetail_$$_jvstb9a_8c.java)
at java.lang.String.valueOf(String.java:2994)
at java.lang.StringBuilder.append(StringBuilder.java:131)
at com.faddistwardrobe.web.model.BodyMeasure.toString(BodyMeasure.java:220)
at java.lang.String.valueOf(String.java:2994)
at java.lang.StringBuilder.append(StringBuilder.java:131)
at java.util.AbstractCollection.toString(AbstractCollection.java:462)
at org.hibernate.collection.internal.PersistentSet.toString(PersistentSet.java:317)
at java.lang.String.valueOf(String.java:2994)
at java.lang.StringBuilder.append(StringBuilder.java:131)
at com.faddistwardrobe.web.model.UserDetail.toString(UserDetail.java:283)
at sun.reflect.GeneratedMethodAccessor1366.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
等等......與休眠有關的長消息...
嘗試這樣:
@RequestMapping(value = { "/new" }, method = RequestMethod.GET)
public String newEmployee(ModelMap model) {
Employee employee = new Employee();
model.addAttribute("employee", employee);
model.addAttribute("edit", false);
return "registration";
}
@RequestMapping(value = { "/new" }, method = RequestMethod.POST)
public String saveEmployee(@Valid Employee employee, BindingResult result,
ModelMap model) {
if (result.hasErrors()) {
return "registration";
}
service.saveEmployee(employee);
return "success";
}
@RequestMapping(value = { "/edit-{ssn}-employee" }, method = RequestMethod.GET)
public String editEmployee(@PathVariable String ssn, ModelMap model) {
Employee employee = service.findEmployeeBySsn(ssn);
model.addAttribute("employee", employee);
model.addAttribute("edit", true);
return "registration";
}
@RequestMapping(value = { "/edit-{ssn}-employee" }, method = RequestMethod.POST)
public String updateEmployee(@Valid Employee employee, BindingResult result,
ModelMap model, @PathVariable String ssn) {
if (result.hasErrors()) {
return "registration";
}
service.updateEmployee(employee);
return "success";
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.