Anonymous
Как установить две переменные в стеке и получить два значения в валидаторе?
Сообщение
Anonymous » 25 янв 2025, 16:19
strutsvalidatorhelper.dolavidation (стек, validatedfield, colveningatesvalidator.class, это);
Как установить две переменные в стеке и получить два значения в валидаторе?
Я использую Struts2 и лицо Проблема при отходе от Struts2 для проверки:
in struts2: < /p>
Код: Выделить всё
@Action(value = "date-to-date-data-provider", results = {@Result(type = "json", params = {"root", "gridModel"})})
@Validations(customValidators = {
@CustomValidator(type = "DateValidator", fieldName = "fromDate", shortCircuit = true),
@CustomValidator(type = "DateValidator", fieldName = "toDate", shortCircuit = true),
@CustomValidator(type = "DateNotInFutureValidator", fieldName = "fromDate"),
@CustomValidator(type = "DateNotInFutureValidator", fieldName = "toDate"),
@CustomValidator(type = "CompareDatesValidator", message = "validate.date.jalali.same.or.before", parameters = {
@ValidationParameter(name = "fromDateParam", value = "${fromDate}"),
@ValidationParameter(name = "toDateParam", value = "${toDate}")})})
@CTLog
public String dataProvider() throws ClientException {
if (StringUtils.isEmpty(getSelectedAccountNumber())) {
return SUCCESS;
}
// ...
return SUCCESS;
}
// CompareDatesValidator class
public class CompareDatesValidator extends BaseValidator {
private static final Logger LOGGER = LoggerFactory.getLogger(CompareDatesValidator.class);
String fromDateParam;
String toDateParam;
@Override
public void doValidate(Object object) throws ValidationException {
String fromDate = (String) parse(fromDateParam, String.class);
String toDate = (String) parse(toDateParam, String.class);
// Compare dates...
}
}
Без Struts2:
Код: Выделить всё
public void doValidation(ValueStack stack, String fieldName, Class validatorClass, Object object) throws ClientException {
BaseValidator validator;
try {
Constructor constructor = validatorClass.getDeclaredConstructor(); // Get the default constructor
validator = (BaseValidator) constructor.newInstance(); // Create a new instance
validator.setValidatorContext(new DelegatingValidatorContext(object, ActionContext.getContext().getInstance(TextProviderFactory.class)));
beanFactory.autowireBean(validator);
validator.setValueStack(stack);
validator.setFieldName(fieldName);
validator.validate(object);
} catch (ValidationException e1) {
LOG.error("ValidationException {}", validatorClass, e1);
} catch (InstantiationException | IllegalAccessException | NoSuchMethodException | InvocationTargetException e) {
throw new ClientException(new SabaMessagesJB().System_Error, e);
}
}
public class CompareDatesValidator extends BaseValidator {
String fromDateParam;
String toDateParam;
@Override
public void doValidate(Object object) throws ValidationException {
String iban = stack.findString("ibanParam");
String reasonOfTransactionCode = stack.findString("reasonOfTransactionCodeParam");
// Compare dates
if (!JalaliCalendar.compareDates(fromDate, toDate)) {
LOGGER.debug("To date {} is before from date {}", toDate, fromDate);
setMessageKey(getMessage(object));
addActionError(object);
}
}
}
private boolean valiadateDate(ValueStack stack, FundTransferVO fundtransfervo, int lineNumber) throws ClientException {
boolean isValid=true;
String fromDate = fundtransfervo.getFromDateParam();
String toDate = fundtransfervo.getToDateParam();
if(StringUtils.isEmpty(fromDate)){
handleNullException(lineNumber,"validate.to.account.is.not.valid");
isValid=false;
}else{
stack.set("fromDateParam", fromDate);
stack.set("toDateParam", toDate);
strutsValidatorHelper.doValidation(stack, validatedField, CheckIBANOwnershipValidator.class, this);
isValid=handleValidationException(lineNumber,CheckIBANOwnershipValidator.class,fromDateParam,isValid);
}
return isValid;
}
Я хочу написать класс CompareDatesValidator для обработки обоих из них (со стойками и без стоек)
Подробнее здесь:
https://stackoverflow.com/questions/793 ... -validator
1737811155
Anonymous
strutsvalidatorhelper.dolavidation (стек, validatedfield, colveningatesvalidator.class, это); Как установить две переменные в стеке и получить два значения в валидаторе? Я использую Struts2 и лицо Проблема при отходе от Struts2 для проверки: in struts2: < /p> [code]@Action(value = "date-to-date-data-provider", results = {@Result(type = "json", params = {"root", "gridModel"})}) @Validations(customValidators = { @CustomValidator(type = "DateValidator", fieldName = "fromDate", shortCircuit = true), @CustomValidator(type = "DateValidator", fieldName = "toDate", shortCircuit = true), @CustomValidator(type = "DateNotInFutureValidator", fieldName = "fromDate"), @CustomValidator(type = "DateNotInFutureValidator", fieldName = "toDate"), @CustomValidator(type = "CompareDatesValidator", message = "validate.date.jalali.same.or.before", parameters = { @ValidationParameter(name = "fromDateParam", value = "${fromDate}"), @ValidationParameter(name = "toDateParam", value = "${toDate}")})}) @CTLog public String dataProvider() throws ClientException { if (StringUtils.isEmpty(getSelectedAccountNumber())) { return SUCCESS; } // ... return SUCCESS; } // CompareDatesValidator class public class CompareDatesValidator extends BaseValidator { private static final Logger LOGGER = LoggerFactory.getLogger(CompareDatesValidator.class); String fromDateParam; String toDateParam; @Override public void doValidate(Object object) throws ValidationException { String fromDate = (String) parse(fromDateParam, String.class); String toDate = (String) parse(toDateParam, String.class); // Compare dates... } } [/code] Без Struts2: [code]public void doValidation(ValueStack stack, String fieldName, Class validatorClass, Object object) throws ClientException { BaseValidator validator; try { Constructor constructor = validatorClass.getDeclaredConstructor(); // Get the default constructor validator = (BaseValidator) constructor.newInstance(); // Create a new instance validator.setValidatorContext(new DelegatingValidatorContext(object, ActionContext.getContext().getInstance(TextProviderFactory.class))); beanFactory.autowireBean(validator); validator.setValueStack(stack); validator.setFieldName(fieldName); validator.validate(object); } catch (ValidationException e1) { LOG.error("ValidationException {}", validatorClass, e1); } catch (InstantiationException | IllegalAccessException | NoSuchMethodException | InvocationTargetException e) { throw new ClientException(new SabaMessagesJB().System_Error, e); } } public class CompareDatesValidator extends BaseValidator { String fromDateParam; String toDateParam; @Override public void doValidate(Object object) throws ValidationException { String iban = stack.findString("ibanParam"); String reasonOfTransactionCode = stack.findString("reasonOfTransactionCodeParam"); // Compare dates if (!JalaliCalendar.compareDates(fromDate, toDate)) { LOGGER.debug("To date {} is before from date {}", toDate, fromDate); setMessageKey(getMessage(object)); addActionError(object); } } } private boolean valiadateDate(ValueStack stack, FundTransferVO fundtransfervo, int lineNumber) throws ClientException { boolean isValid=true; String fromDate = fundtransfervo.getFromDateParam(); String toDate = fundtransfervo.getToDateParam(); if(StringUtils.isEmpty(fromDate)){ handleNullException(lineNumber,"validate.to.account.is.not.valid"); isValid=false; }else{ stack.set("fromDateParam", fromDate); stack.set("toDateParam", toDate); strutsValidatorHelper.doValidation(stack, validatedField, CheckIBANOwnershipValidator.class, this); isValid=handleValidationException(lineNumber,CheckIBANOwnershipValidator.class,fromDateParam,isValid); } return isValid; } [/code] Я хочу написать класс CompareDatesValidator для обработки обоих из них (со стойками и без стоек) Подробнее здесь: [url]https://stackoverflow.com/questions/79386583/how-to-set-two-variables-in-the-stack-and-retrieve-two-values-in-the-validator[/url]