2017-07-07 5 views
0

私はspring mvcを学んでおり、spring mvcのテキストフィールドの下に検証エラーメッセージを表示することに固執しています。
ここにコントローラがあります。 updateUser()メソッドでは、検証エラーをコード化します。spring mvcの検証エラーを表示できません

@Controller 
public class ReportsController { 

@Autowired 
private ReportsDAO reportsDAO; 

@Autowired 
MyValidationUtils myValidationUtils; 

public void setReportsDAO(ReportsDAO reportsDAO) { 
    this.reportsDAO = reportsDAO; 
} 

@RequestMapping(value="/reports",method=RequestMethod.GET) 
public ModelAndView report(){ 
    List<User> userList=reportsDAO.showAll(); 
    ModelAndView modelAndView=new ModelAndView(); 
    modelAndView.setViewName("Reports"); 
    modelAndView.addObject("userList", userList); 
    modelAndView.addObject("User", new User()); 
    return modelAndView; 
} 

@RequestMapping(value="/update/{id}", method=RequestMethod.GET) 
public ModelAndView reportUpdate(@PathVariable("id") String id){ 
    User user=reportsDAO.showByUCode(id); 
    List<User> userList=reportsDAO.showAll(); 
    ModelAndView modelAndView=new ModelAndView(); 
    modelAndView.setViewName("Reports"); 
    modelAndView.addObject("userList", userList); 
    modelAndView.addObject("User", user); 
    if(user!=null){ 
     modelAndView.addObject("editUser", user); 
    } 
    return modelAndView; 
} 
@RequestMapping(value="/delete/{id}", method=RequestMethod.GET) 
public ModelAndView reportDelete(@PathVariable("id") String id){ 
    int result=reportsDAO.deleteByID(id); 
    ModelAndView modelAndView=new ModelAndView(); 
    modelAndView.setViewName("redirect:/reports"); 
    return modelAndView; 
} 

@InitBinder 
protected void initBinder(WebDataBinder binder) { 
    binder.setValidator(myValidationUtils); 
} 


@RequestMapping(value="/reportUpdate",method=RequestMethod.POST) 
public ModelAndView updateUser(@ModelAttribute @Validated User user,BindingResult results,RedirectAttributes redirectAttributes){ 

    ModelAndView modelAndView=new ModelAndView(); 
    if(results.hasErrors()){ 
     modelAndView.setViewName("Reports"); 
     modelAndView.addObject("User", user); 
     results.rejectValue("name", "Name cannot be empty."); 
     return modelAndView; 
    } 
    if(user!=null){ 
     int result=reportsDAO.updateByCode(user); 
     if(result!=-1){ 
      modelAndView.setViewName("redirect:/reports"); 
     }else{ 
      modelAndView.setViewName("Reports"); 
      modelAndView.addObject("message", "Unable to edit, Please try again."); 
     } 
    }else{ 
     modelAndView.setViewName("Reports"); 
     modelAndView.addObject("message", "Unable to edit, Please try again."); 
    } 

    return modelAndView; 
} 
} 

ここはjsp形式です。

<form:form action="/ORMWebApp/reportUpdate" modelAttribute="User" 
      method="post" class="form-style-9"> 
      <ul> 
       <li><%-- <form:label path="ucode">UCODE</form:label> --%> <form:input type="hidden" path="ucode" 
         class="field-style field-full align-none" 
         placeholder="UCode" value="${editUser.ucode}" /> <form:errors 
         path="ucode" class="field-style field-full align-none"></form:errors></li> 

       <li> 
       <spring:bind path="name"> 
       <form:label path="name">NAME</form:label> <form:input type="text" path="name" 
         class="field-style field-full align-none" 
         placeholder="Name" value="${editUser.name}" /> <form:errors 
         path="name" class="field-style field-full align-none"></form:errors></spring:bind></li> 
       <li> 
       <spring:bind path="email"> 
       <form:label path="email">EMAIL</form:label> <form:input type="email" path="email" 
         class="field-style field-full align-none" 
         placeholder="Email" value="${editUser.email}" /> <form:errors 
         path="email" class="field-style field-full align-none"></form:errors></spring:bind></li> 
       <li> 
       <spring:bind path="address"> 
       <form:label path="address">ADDRESS</form:label> <form:input type="text" 
         path="address" 
         class="field-style field-full align-none" placeholder="Address" 
         value="${editUser.address}" /> <form:errors path="address" 
         class="field-style field-full align-none"></form:errors></spring:bind></li> 
       <li> 
       <spring:bind path="password"> 
       <form:label path="password">PASSWORD</form:label> <form:input type="password" 
         path="password" 
         class="field-style field-full align-none" placeholder="Password" 
         value="${editUser.password}" /> <form:errors path="password" 
         class="field-style field-full align-none"></form:errors></spring:bind></li> 
       <li> 
       <spring:bind path="about"> 
       <form:label path="about">ABOUT</form:label> <form:textarea path="about" 
         class="field-style" placeholder="About" ></form:textarea> 
         <form:errors path="about" 
         class="field-style field-full align-none"></form:errors></spring:bind></li> 
       <li><input type="submit" value="UPDATE" /></li> 
      </ul> 
     </form:form> 

ここに検証ユーティリティクラスがあります。

public class MyValidationUtils implements Validator{ 

@Override 
public boolean supports(Class<?> arg0) { 

    return User.class.equals(arg0); 
} 

@Override 
public void validate(Object target, Errors errors) { 

    ValidationUtils.rejectIfEmptyOrWhitespace(errors, "name", "NotNull.user.name", "Name cannot be blank."); 
    ValidationUtils.rejectIfEmptyOrWhitespace(errors, "address", "NotNull.user.address", "Address cannot be blank."); 
    ValidationUtils.rejectIfEmptyOrWhitespace(errors, "email", "NotNull.user.email", "email cannot be blank."); 
    ValidationUtils.rejectIfEmptyOrWhitespace(errors, "password", "NotNull.user.password", "password cannot be blank."); 
    ValidationUtils.rejectIfEmptyOrWhitespace(errors, "about", "NotNull.user.about", "About cannot be blank."); 

} 
}  

フォームに妥当性検査エラーを返すために、これが欠けています。前もって感謝します。

答えて

0

問題は、モデル属性を正しくバインドしておらず、結果も返さないということでした。これは私のために働く。

@RequestMapping(value="/reportUpdate",method=RequestMethod.POST) 
public ModelAndView updateUser(@ModelAttribute("User") @Validated User user,BindingResult results,RedirectAttributes redirectAttributes){ 

    ModelAndView modelAndView=new ModelAndView(); 
    //myValidationUtils.validate(user, results); 
    if(results.hasErrors()){ 
     return new ModelAndView("Reports", "User", user); 
    } 
    if(user!=null){ 
     int result=reportsDAO.updateByCode(user); 
     if(result!=-1){ 
      modelAndView.setViewName("redirect:/reports"); 
     }else{ 
      modelAndView.setViewName("Reports"); 
      modelAndView.addObject("message", "Unable to edit, Please try again."); 
     } 
    }else{ 
     modelAndView.setViewName("Reports"); 
     modelAndView.addObject("message", "Unable to edit, Please try again."); 
    } 

    return modelAndView; 
} 

これをMyValidationUtilsに書き込む必要があります。

@Override 
public void validate(Object target, Errors errors) { 
    User user=(User)target; 
    ValidationUtils.rejectIfEmptyOrWhitespace(errors, "name", "NotNull.user.name", "Name cannot be blank."); 
    ValidationUtils.rejectIfEmptyOrWhitespace(errors, "address", "NotNull.user.address", "Address cannot be blank."); 
    ValidationUtils.rejectIfEmptyOrWhitespace(errors, "email", "NotNull.user.email", "email cannot be blank."); 
    ValidationUtils.rejectIfEmptyOrWhitespace(errors, "password", "NotNull.user.password", "password cannot be blank."); 
    ValidationUtils.rejectIfEmptyOrWhitespace(errors, "about", "NotNull.user.about", "About cannot be blank."); 

} 

リソースフォルダにmessages.propertiesを挿入します。

NotNull.user.name=Please fill name. 
NotNull.user.address=Please fill address. 
NotNull.user.email=Please fill email. 
NotNull.user.password=Please fill password. 
NotNull.user.about=Please fill about. 

ディスパッチャサーブレットでBeanを作成します。

<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource"> 
    <property name="basename"> 
     <value>messages</value> 
    </property> 
</bean> 
<bean id="myValidationUtils" class="org.apedusoft.validator.MyValidationUtils"></bean> 

そして、messages.propertiesファイルに値を返します。しかし、私の側でいくつかのJSPフォームのバグが原因です。検証エラーメッセージは、名前だけは2回、電子メールなどは正常に動作しています。

関連する問題