Я знаю, что не стоит создавать экземпляр переменной класса из метода, но, к сожалению, я сталкиваюсь с ситуацией, когда у меня нет другого решения. Я создал несколько пользовательских валидаторов, и у меня есть объект (rawField
), который заполнен некоторой информацией из GUI. Чтобы заполнить эту переменную экземпляра, я использую метод validate из javax.faces.Validator
.
Так что я получаю информацию для каждого поля из GUI через это событие.
Мой вопрос: это хороший шаблон дизайна? Кто-нибудь лучше знает, как мне создать экземпляр этой переменной?
Родительский класс:
public abstract class FormFieldValidator extends BaseValidator implements IFormFieldValidator, Validator {
protected RawField rawField;
@Override
public abstract RawField doInitialize(Object inputObject);
@Override
public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException {
rawField = doInitialize(value);
if (rawField == null) {
throw new IllegalArgumentException("The field cannot be empty");
}
doBasicValidation();
}
}
Дочерний класс
@FacesValidator(Constants.Validators.USERNAME_VALIDATOR)
public class UsernameValidator extends FormFieldValidator {
@Override
public RawField doInitialize(Object guiField) {
ValidationConditions validationConditions = new ValidationConditions
.Builder(Entities.ParamsSize.USERNAME_MIN_LENGTH, Entities.ParamsSize.USERNAME_MAX_LENGTH)
.setRegex(Constants.Regex.USERNAME_REGEX).setNullable(false).setUnique(true).build();
FieldDetails fieldDetails = new FieldDetails(guiField, "Username");
RawField rawField = new RawField(fieldDetails, validationConditions);
return rawField;
}
}