Короткое замыкание в проверке Struts2
Предположим, что есть поле типа BigDecimal
в классе действий следующим образом.
@Namespace("/admin_side")
@ResultPath("/WEB-INF/content")
@ParentPackage(value = "struts-default")
public final class TestAction extends ActionSupport
{
private BigDecimal price;
//Setter and getter.
@Validations(
requiredFields = {
@RequiredFieldValidator(fieldName = "price", type = ValidatorType.FIELD, message = "Price is mandatory.")},
fieldExpressions = {
@FieldExpressionValidator(fieldName = "price", expression = "price>0", shortCircuit = true, message = "Price cannot be less than or equal to zero.")})
@Action(value = "Add",
results = {
@Result(name = ActionSupport.SUCCESS, type = "redirectAction", params = {"namespace", "/admin_side", "actionName", "Test"}),
@Result(name = ActionSupport.INPUT, location = "Test.jsp")},
interceptorRefs = {
@InterceptorRef(value = "defaultStack", params = {"params.acceptParamNames", "price", "validation.validateAnnotatedMethodOnly", "true"})
})
public String insert() {
return ActionSupport.SUCCESS;
}
//This method is worth nothing. It is used just to return an initial view on page load.
@Action(value = "Test",
results = {
@Result(name = ActionSupport.SUCCESS, location = "Test.jsp"),
@Result(name = ActionSupport.INPUT, location = "Test.jsp")},
interceptorRefs = {
@InterceptorRef(value = "defaultStack", params = {"params.acceptParamNames", "", "params.excludeMethods", "load", "validation.validateAnnotatedMethodOnly", "true"})})
public String load() throws Exception {
return ActionSupport.SUCCESS;
}
}
И следующая форма.
<s:form namespace="/admin_side" action="Test" id="dataForm" name="dataForm">
<s:fielderror fieldName="price"/>
<s:textfield id="price" name="price"/>
<s:submit value="Submit" action="Add"/>
</s:form>
Я хочу достичь,
- Если поле оставить пустым, то единственное сообщение Цена обязательно. должен отображаться через
@RequiredFieldValidator
- Если вводится нечисловое значение, например "abc", оно должно отображать только сообщение об ошибке преобразования из файла свойств.
- Если предпринимается отрицательное значение, единственное сообщение Цена не может быть меньше или равно нулю. должен появиться через
@FieldExpressionValidator
,
Одновременно должна появляться либо одна ошибка преобразования, либо одна ошибка проверки.
Это возможно? Я до сих пор не понимаю должным образом функцию shourtCircuit
приписывать.
1 ответ
Решение
На первый взгляд так много не видел. Но, посмотрев на документы, я бы сказал, что есть способ обрабатывать ошибки преобразования. Путем добавления валидатора преобразования в конфигурацию, которая является валидатором короткого замыкания. Короткое замыкание означает, что если такой валидатор имеет ошибки, другие валидаторы пропускаются.
conversionErrorFields = @ConversionErrorFieldValidator(fieldName = "price", message = "Price has invalid value", shortCircuit = true)
поместите этот код под @Validations
аннотаций.