0

sf:formを使用してエンティティを永続化しようとしています。

これはjspです:

<sf:form method="POST" action="${pageContext.request.contextPath}/addStudent" modelAttribute="student">
<fieldset>
<table>
<tr>
    <th><sf:label path="nb">Number:</sf:label></th>
    <td><sf:input type="text" path="nb"/><br/>
    <sf:errors path="nb"></sf:errors>
</tr>
......
</table>  
</fieldset>

エンティティの属性は次のようになります。

@NotNull(message="not null")
@Size(min=5, max=10, message="length min 5")
@Column(name="NB", unique=true)
private String nb;

コントローラ:

@RequestMapping(value="/addStudent", method=RequestMethod.POST)
public ModelAndView addStudent(HttpServletRequest request, @ModelAttribute("student") @Valid Student student, BindingResult bR){

    ModelAndView mav = new ModelAndView("students");
    if(bR.hasErrors()){
        return mav;
    }
    studentService.saveStudent(student);
    return mav;
}

さて、nbフィールドを空のままにするか、エントリを短くすると、検証エラーが発生します。私の問題は、エラーがjspに表示されないが、例外がスローされることです。

List of constraint violations:[
ConstraintViolationImpl{interpolatedMessage='length min 5', propertyPath=nb, rootBeanClass=class i.have.serious.problem.Student, messageTemplate='length min 5'}  
javax.validation.ConstraintViolationException: Validation failed for classes [i.have.serious.problem.Student] during persist time for groups [javax.validation.groups.Default, ]

多分私は何かが恋しいです..私はヒントや助けに感謝します、thx

-----------------------------解決済み-------------------- ---------------

4

2 に答える 2

1

確かに..私は何かを逃しました-> JSR-303プロバイダーがクラスパスに存在する場合、@Validで@Controller入力を検証するためのサポート。

xmlns:mvc="http://www.springframework.org/schema/mvc"
http://www.springframework.org/schema/mvc 
http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd">

<mvc:annotation-driven />

今は正常に動作します:) ..気遣ってくれてありがとう!

于 2012-08-04T01:21:49.000 に答える
0

メソッドで新しい ModelAndView を作成していますが、これは bindingResult をビューに戻していない可能性があります。

代わりにModelAndView、追加のパラメーターとして取り、それが機能するかどうかを確認できますか:

@RequestMapping(value="/addStudent", method=RequestMethod.POST)
public ModelAndView neuStudent(HttpServletRequest request, @ModelAttribute("student") @Valid Student student, BindingResult bR, ModelAndView mav){

    mav.setViewName("students");
    if(bR.hasErrors()){
        return mav;
    }
    studentService.saveStudent(student);
    return mav;
}
于 2012-08-04T01:02:13.053 に答える