簡體   English   中英

Spring MVC驗證在新表單期間有效,但嘗試更新時無法顯示驗證

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM