Предположим, что в классе действия есть поле типа BigDecimal
.Короткое замыкание в проверке Struts2
@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
.
Вы видите только ошибки или хотите предотвратить валидации? –
Да, я говорю о профилактике. Только по одному. Остальное нужно игнорировать. Если преобразование завершается неудачно, нет смысла проверять какие-либо проверки (проверки). Если преобразование завершается успешно, проверки должны выполняться в определенном порядке, сначала должны быть проверены первые пустые поля, если это удастся, значение должно быть проверено на диапазон/длину и так далее. Если одно подтверждение не выполняется, остальные должны быть проигнорированы. Это можно сделать? – Tiny