Я работаю с Spring 4.0.7 и Spring Web Flow 2.4.0Spring Web Flow LocalValidatorFactoryBean (JSR-349) не работает, как ожидается
У меня есть следующие (я работаю с JSR 349
):
Для лица:
@Min(value=1, message="{person.age.min}",groups={PersonRegistrationCheck.class})
@Max(value=115, message="{person.age.max}",groups={PersonRegistrationCheck.class})
@NotNull(message="{field.null}",groups={PersonRegistrationCheck.class})
@Column(name="age", nullable=false, length=3)
@XmlElement
public Integer getAge() {
return age;
}
в файле ValidationMessages.properties
person.age.max = Invalid data '${validatedValue}', the maximum value allowed is {value}
person.age.min = Invalid data '${validatedValue}', the minimum value allowed is {value}
В некоторых @Configuration
@Bean
public LocalValidatorFactoryBean localValidatorFactoryBean(ReloadableResourceBundleMessageSource messageSource){
LocalValidatorFactoryBean localValidatorFactoryBean = new LocalValidatorFactoryBean();
localValidatorFactoryBean.setValidationMessageSource(messageSource);
MessageSourceResourceBundleLocator msrbl = new MessageSourceResourceBundleLocator(messageSource);
ResourceBundleMessageInterpolator rbmi = new ResourceBundleMessageInterpolator(msrbl);
localValidatorFactoryBean.setMessageInterpolator(rbmi);
return localValidatorFactoryBean;
}
Через Spring MVC это работает прекрасно:
<tr>
<td><spring:message code="person.form.age"/></td>
<td><form:input path="age" size="40"/></td>
<td><form:errors path="age" cssClass="error"/></td>
</tr>
Если я ставлю недопустимое значение, как 500 я получаю
Неверные данные 500, максимальное значение разрешено 115
Я могу видеть i nvalid и максимальное допустимое значение.
Пока здесь все не в порядке ..
Примечание: это не необходимо сделать специальную инъекцию о LocalValidatorFactoryBean
для Spring MVC
Проблема с Spring Web Flow.
Примечание: это необходимо сделать специальную инъекцию о LocalValidatorFactoryBean
для Spring Web Flow
Здесь его конфигурации:
@Autowired
private LocalValidatorFactoryBean localValidatorFactoryBean;
@Bean
public FlowBuilderServices flowBuilderServices() {
return getFlowBuilderServicesBuilder()
.setViewFactoryCreator(mvcViewFactoryCreator())
.setConversionService(conversionService())
.setValidator(localValidatorFactoryBean)
.setDevelopmentMode(true)
.build();
}
Выше практически почти то же самое в соответствии с spring-webflow-samples /WebFlowConfig
В определении потока Тион
<view-state id="start"
view="person.flow.form.register"
model="person"
validation-hints="'com.manuel.jordan...PersonRegistrationCheck'" >
<transition on="submit" to="address" bind="true" validate="true" >
<evaluate expression="personAction.savePerson(flowRequestContext)" />
</transition>
<transition on="cancel" to="end" bind="false" validate="false"/>
</view-state>
Снова в .jsp файле
<tr>
<td><spring:message code="person.form.age"/></td>
<td><form:input path="age" size="40"/></td>
<td><form:errors path="age" cssClass="error"/></td>
</tr>
Примечание: Это другой или новый файл .jsp, это работать на Spring Web Flow. Поэтому один для работы через Spring MVC
и другие для SWF
. Это для целей тестирования
Ok проблемы:
Опять Если я ставлю недопустимое значение, как 500 я получаю
Invalid данные $ validatedValue, максимальное допустимое значение является значением
Обратите внимание: мы не можем см., Недействительные данные (остается с $ validatedValue) и value
остается как статический.
Поэтому:
Spring MVC
показывает:Invalid data 500, the maximum value allowed is 115
SWF
шоу:Invalid data $validatedValue, the maximum value allowed is value
Примечание: Даже если использовать следующий, все пойдет не так же.
@Bean
public LocalValidatorFactoryBean localValidatorFactoryBean(ReloadableResourceBundleMessageSource messageSource){
LocalValidatorFactoryBean localValidatorFactoryBean = new LocalValidatorFactoryBean();
localValidatorFactoryBean.setValidationMessageSource(messageSource);
//MessageSourceResourceBundleLocator msrbl = new MessageSourceResourceBundleLocator(messageSource);
//ResourceBundleMessageInterpolator rbmi = new ResourceBundleMessageInterpolator(msrbl);
//localValidatorFactoryBean.setMessageInterpolator(rbmi);
return localValidatorFactoryBean;
}
Что случилось или пропало без вести?
Спасибо Rossen. Позвольте мне проверить это, в эти выходные. –