2008年5月29日木曜日

Spring 2.5 AbstractWizardFormControllerを使ってみる(3)

Validatorを使ってみます。

【手順概要】
InputValidatorを追加します。

SimpleWizardControllerでprotected void validatePage(..)をオーバーライドします。

page1form.jsp、page2form.jspにform:errorsタグを入れ込みます。

springapp2-servlet.xmlにvalidatorの定義を追加します。

【手順詳細】
InputValidatorを追加します。
package springapp2.service;

import org.springframework.validation.Errors;
import org.springframework.validation.ValidationUtils;
import org.springframework.validation.Validator;

public class InputValidator implements Validator {

public boolean supports(Class clazz) {
return AllValueForm.class.isAssignableFrom(clazz);
}

public void validate(Object obj, Errors errors) {
validateFirstPage((AllValueForm) obj, errors);
validateSecondPage((AllValueForm) obj, errors);

}

public void validateFirstPage(AllValueForm form, Errors errors) {
int id = form.getFirstId();
if (id == 0) {
errors.rejectValue("firstId", "", null,
"ID required (Other than 0).");
}
ValidationUtils.rejectIfEmpty(errors, "firstValue", "",
"Value required.");
}

public void validateSecondPage(AllValueForm form, Errors errors) {
ValidationUtils.rejectIfEmpty(errors, "nextValue", "",
"Value required.");
}

}

SimpleWizardControllerでprotected void validatePage(..)をオーバーライドします。
    @Override
protected void validatePage(Object command, Errors errors, int page,
boolean finish) {
AllValueForm form = (AllValueForm) command;
InputValidator validator = (InputValidator) getValidator();
// errors.setNestedPath("order");
switch (page) {
case 0:
validator.validateFirstPage(form, errors);
break;
case 1:
validator.validateSecondPage(form, errors);
}
}

page1form.jsp、page2form.jspにform:errorsタグを入れ込みます。(太字部分)
(page2form.jspは省略しています)
  <table width="95%" bgcolor="f8f8ff" border="0" cellspacing="0" cellpadding="5">
<tr>
<td align="right" width="20%">First id:</td>
<td width="20%">
<form:input path="firstId"/>
</td>
<td width="60%">
<form:errors path="firstId" cssClass="error"/>
</td>
</tr>
・・・略・・・
<form:errors path="firstValue" cssClass="error"/>


springapp2-servlet.xmlにvalidatorの定義を追加します。(太字部分)
・・・略・・・
<bean name="/page1form.htm"
class="springapp2.web.SimpleWizardController">
<property name="sessionForm" value="true" />
<property name="commandName" value="allValueForm" />
<property name="commandClass" value="springapp2.service.AllValueForm" />
<property name="validator">
<bean class="springapp2.service.InputValidator"/>
</property>

</bean>
<bean name="/page2form.htm"
class="springapp2.web.SimpleWizardController">
<property name="sessionForm" value="true" />
<property name="commandName" value="allValueForm" />
<property name="commandClass" value="springapp2.service.AllValueForm" />
<property name="validator">
<bean class="springapp2.service.InputValidator"/>
</property>

</bean>
・・・略・・・


以上。

0 件のコメント: